如何找到指向另一个符号链接的图标的符号链接

时间:2016-07-16 11:31:02

标签: bash

在sardi图标主题中,我注意到有符号链接指向原始图像的符号链接。

命令

ls -lR . | grep ^l | wc

告诉我,我有3511个符号链接,共有5个图标集。 要检查的15,000个链接。

是否有(bash)方式向我显示指向另一个符号链接的所有链接?

1 个答案:

答案 0 :(得分:0)

以下是使用find和一些bash功能的解决方案:

shopt -s extglob
find . -type l | while read -r; do
    t="$(readlink "$REPLY")"
    if [[ "$t" != /* ]]; then
        t="${REPLY%%*([^/])}$t"
    fi
    [ -L "$t" ] && echo "$REPLY"
done

或全部在一行:

find . -type l | while read -r; do t="$(readlink "$REPLY")"; if [[ "$t" != /* ]]; then t="${REPLY%%*([^/])}$t"; fi; [ -L "$t" ] && echo "$REPLY"; done
  • find . -type l找到所有符号链接。
  • 然后,对于每个符号链接$REPLY,我们使用$t获取其目标readlink
  • 如果目标不是绝对名称(不以/开头),我们会在原始路径$REPLY前面加上dirname(表达式${REPLY%%*([^/])}会删除所有尾随名称非斜线字符)。
  • 如果目标也是符号链接(-L),我们会输出原始名称$REPLY

必须启用extglob扩展程序才能使*([^/])生效。