2016-07-16 62 views
2

在sardi图标主题中,我注意到符号链接指向符号链接指向原始图像的符号链接。如何找到指向另一个符号链接的图标的符号链接

命令

ls -lR . | grep ^l | wc 

显示我,我有3511个的符号链接次5个图标集。 15,000个链接检查。

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

+1

链接,既硬又符号,只是一种方式。如果你想看到所有链接“指向”另一个链接,你必须检查整个系统中的所有链接,看看哪些链接指向指定的目标。基本上你需要做'find/-type l'并检查每个文件(如果它们指向目标,它的确会有几千个)。 –

+0

可能的重复:https://stackoverflow.com/questions/6184849/symbolic-link-find-all-files-that-link-to-this-file –

+0

@LeoIzen我不认为这是重复的。 – melpomene

回答

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,我们使用readlink得到它的目标$t
  • 如果目标不是绝对名称(不是从/开始),我们在原路径$REPLY(表达式${REPLY%%*([^/])}删除所有尾随的非斜杠字符)前加上dirname。
  • 如果目标也是符号链接(-L),我们输出原始名称$REPLY

必须启用extglob扩展才能使*([^/])正常工作。