Linux Bash-断开的符号链接

Linux Bash-断开的符号链接,linux,bash,unix,debian,symlink,Linux,Bash,Unix,Debian,Symlink,我在Debian下编写bash脚本时遇到了麻烦。我有一个包含更多文件夹和文件的文件夹(它是一个文件夹树)。此树包含符号链接。我想递归地遍历整个结构,检测断开的符号链接并以这种方式(绝对路径)打印它们(不是它们的目标,而是链接本身): 但我不想也不能用经典 find -L $(path) -type l 因为它遵循给定结构外的正确链接,并检测结构外的断开链接,我不希望在打印输出中使用这些链接,因为我只希望检测$(path)及其所有子目录中给定的结构内的断开符号链接。你能帮我一下吗?我觉得这将需要

我在Debian下编写bash脚本时遇到了麻烦。我有一个包含更多文件夹和文件的文件夹(它是一个文件夹树)。此树包含符号链接。我想递归地遍历整个结构,检测断开的符号链接并以这种方式(绝对路径)打印它们(不是它们的目标,而是链接本身):

但我不想也不能用经典

find -L $(path) -type l

因为它遵循给定结构外的正确链接,并检测结构外的断开链接,我不希望在打印输出中使用这些链接,因为我只希望检测$(path)及其所有子目录中给定的结构内的断开符号链接。你能帮我一下吗?我觉得这将需要一些读链接和一些循环的黑魔法,但我不知道如何。谢谢你的建议!:)

以下命令将在没有以下符号链接的情况下执行此任务:

find /tmp/ -type l -printf '%p|' -exec stat -L {} \; 2>&1 | grep 'No such' | cut -d'|' -f1
stat
-L
选项通过检查其后面的文件来跟踪链接(但是不要将其与
查找
-L
选项混淆)。如果未找到链接,则会出现以下错误:

stat: cannot stat `./symlink': No such file or directory

但是,我们也希望打印文件名,因此我们使用
-printf“%p |”
。此处的管道仅用作分隔符(我怀疑您是否有名称中包含管道的文件),用于将文件名与以其他方式打印的
stat
错误分开。

我不熟悉
-F
。它做什么?find-F$(path)-type l=>跟随符号链接(取消引用符号链接并替换为引用的文件或目录),当不能跟随时,执行type l并测试文件是否为符号链接。如果是,则打印出来。
find
的哪个变体或版本支持
-F
?哦,对不起。。。。我是说-我,该死,我真的很累-L我的意思是从所有的麻烦中找出-LApart,在
Foo
Bar
之后的下一个变量应该是
Baz
,而不是
Goo
:-)
stat: cannot stat `./symlink': No such file or directory