如何找到指向给定文件夹树之外的任何符号链接?

如何找到指向给定文件夹树之外的任何符号链接?

我有一堆深度超过 10 层的文件夹/文件。

我如何才能找到指向该文件夹树之外的任何符号链接?

我试过了,find -type l但是这会返回所有软链接......甚至那些目标位于文件夹树中的软链接。

谢谢

答案1

如果所有符号链接目标都是绝对的,您可以执行以下操作:

find /folder/tree -type l -not -lname '/folder/tree/*' -print

但是,如果您的树中有任何相对链接,尤其是具有./../嵌入目标路径的链接,则可能需要循环遍历每个链接以规范化目标,然后查看它是否与文件夹树匹配:

find /folder/tree -type l -print | \
    while read symlink
    do
        target=$(readlink -f "$symlink")
        expr match "$target" "^/folder/tree/.*" >/dev/null || echo "$symlink"
    done
# end of pipeline

两者的作用相同,即打印每个目标不匹配的符号链接/folder/tree

相关内容