![仅使用 find 列出有效目录的所有符号链接](https://linux22.com/image/5545/%E4%BB%85%E4%BD%BF%E7%94%A8%20find%20%E5%88%97%E5%87%BA%E6%9C%89%E6%95%88%E7%9B%AE%E5%BD%95%E7%9A%84%E6%89%80%E6%9C%89%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5.png)
我可以用
find /search/location -type l
列出里面的所有符号链接/搜索/位置。
如何将输出限制为find
引用有效目录的符号链接,并排除损坏的符号链接和文件链接?
答案1
使用GNU find(非嵌入式Linux和Cygwin上的实现):
find /search/location -type l -xtype d
对于缺少主函数的 find 实现-xtype
,您可以使用 的两次调用find
,一次用于过滤符号链接,一次用于过滤指向目录的链接:
find /search/location -type l -exec sh -c 'find -L "$@" -type d -print' _ {} +
或者你可以调用该test
程序:
find /search/location -type l -exec test {} \; -print
或者,如果你有 zsh,那么只需要两个全局限定符(@
= 是符号链接,-
= 以下限定符作用于链接目标,/
= 是目录):
print -lr /search/location/**/*(@-/)
答案2
尝试:
find /search/location -type l -exec test -e {} \; -print
从man test
:
-e FILE FILE exists
您可能还会受益于U&L 对如何找到损坏的符号链接的回答;也请务必阅读评论。
编辑:test -d
检查“FILE 是否存在并且是一个目录”
find /search/location -type l -exec test -d {} \; -print
答案3
干得好:
for i in $(find /search/location -type l); do
test -d $(readlink $i) && echo $i
done