我们有兴趣打印从根目录开始的所有符号链接信息。我们希望以以下格式打印信息:
symbolic name -> actual name
[注意同一行]
我们尝试了以下方法,它为我们提供了符号名称和实际名称,但在不同的线路上:
find . -type l -print -exec readlink -f {} \;
答案1
我不认为你离得很远。使用-printf
而不是-print
(假设你的版本find
有它),你会得到这个
find / -type l -printf "%p -> " -exec readlink -f {} \;
输出示例
/bin/apropos -> /bin/whatis
/bin/awk -> /bin/gawk
/bin/bzcmp -> /bin/bzdiff
以供参考,
ls -gl /bin/apropos
lrwxrwxrwx 1 roaima 10 Mar 28 20:15 /bin/apropos -> whatis
对于损坏的链接,您将得到重击的行(-printf
没有换行符)
答案2
和zsh
:
for link (**/*(ND@^-@)) print -r -- "$link -> $link:P"
where@^-@
将 glob 扩展限制为未损坏的符号链接文件(目标可访问的符号链接,是确定其规范路径的必要条件,相当于 GNUfind
的-type l ! -xtype l
)。$link:P
给出链接的实际路径(所有组件的符号链接解析后的规范绝对路径,类似于realpath()
标准函数或 GNU 的作用readlink -f
)。