我有一堆深度超过 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
。