我在Debian下编写bash脚本时遇到了麻烦。我有包含更多文件夹和文件的文件夹(它是一个文件夹树)。该树包含符号链接。我想以递归方式遍历整个结构,检测破坏的符号链接,打印它们(不是它们的目标,但链接本身)在这个区域中(绝对路径):
/tmp/Foo/Bar/symlink1
/tmp/Foo/symlink2
/tmp/Foo/Goo/symlink3
但我不想要,也不能使用经典
find -L $(path) -type l
因为这遵循给定结构的正确链接并检测到结构外部的断开链接,并且我不想在打印输出中使用这些链接,因为我只想检测$(路径中)给出的结构内部的破坏符号链接)以及所有子目录。你能帮帮我吗?我觉得这需要一些带有readlink和一些循环的黑魔法,但我不知道如何。谢谢你的建议! :)
答案 0 :(得分:0)
以下命令将在不遵循符号链接的情况下完成工作:
find /tmp/ -type l -printf '%p|' -exec stat -L {} \; 2>&1 | grep 'No such' | cut -d'|' -f1
-L
的{{1}}选项通过检查其背后的文件来跟踪链接(不要将其与stat
选项-L
混淆)。找不到链接时,会出现错误:
find
但是,我们也希望打印文件的名称,这就是我们使用stat: cannot stat `./symlink': No such file or directory
的原因。此处的管道仅用作分隔符(我怀疑您的名称中包含带有管道的文件),以将文件名与将以其他方式打印的-printf '%p|'
错误分开。