如何获取符号链接列表,不包括断开的链接?

bre*_*son 5 unix symlink

我已经能够找到一个命令来获取仅有断开链接的列表,但不能找到"工作"符号链接

find -H mydir -type l
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做呢?

如果我有这些文件mydir:

foo
bar
bob
carol
Run Code Online (Sandbox Code Playgroud)

如果它们都是符号链接,但bob指向不存在的文件,我想看

foo
bar
carol
Run Code Online (Sandbox Code Playgroud)

tiw*_*iwo 5

随着find(1)使用

$ find . -type l -not -xtype l
Run Code Online (Sandbox Code Playgroud)

此命令查找在跟随后不再是链接的链接 - 即未断开的链接。(请注意,它们可能指向普通或特殊文件、目录或其他。使用-xtype f代替-not -xtype l仅查找指向普通文件的链接。)

$ find . -type l -not -xtype l -ls
Run Code Online (Sandbox Code Playgroud)

报告他们指向的地方。

如果你在交互式 shell 的使用中经常遇到类似的问题,zsh就是你的朋友:

% echo **/*(@^-@)
Run Code Online (Sandbox Code Playgroud)

遵循相同的想法:Glob 限定符 @限制为链接,并且^-@意味着“当启用跟随时,不是 ( ^) 链接 ( @) ( -)。

(另请参阅有关在 python 中查找损坏链接的帖子,实际上这演示了您可以在 Linux 下的所有语言中执行的操作。有关“如何查找损坏的链接”的相关问题的完整答案,请参阅此博客文章。)