仅使用 find 列出有效目录的所有符号链接

仅使用 find 列出有效目录的所有符号链接

我可以用

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

相关内容