我已经能够找到一个命令来获取损坏链接的列表,而不是“工作”符号链接
find -H mydir -type l
我该怎么做相反的事情?
如果我有这些文件mydir
:
foo
bar
bob
carol
如果它们都是符号链接,但bob
指向一个不存在的文件,我想看看
foo
bar
carol
随着find(1)
使用
$ find . -type l -not -xtype l
此命令查找在跟随后不再是链接的链接 - 即完整的链接。(请注意,它们可能指向普通或特殊文件、目录或其他。使用-xtype f
而不是-not -xtype l
仅查找指向普通文件的链接。)
$ find . -type l -not -xtype l -ls
报告他们指向的地方。
如果您在交互式 shell 使用中经常遇到类似的问题,zsh是您的朋友:
% echo **/*(@^-@)
遵循相同的想法:Glob 限定符 @
限制为链接,并且在启用以下功能时^-@
表示“不是(^
)链接( )( )。@
-
(另请参阅这篇关于在 python 中查找断开链接的帖子,实际上这演示了您可以在 Linux 下的所有语言中执行的操作。有关“如何查找断开的链接”相关问题的完整答案,请参见此博客文章。)
这将仅显示(LINUX)符号链接,这些链接是指向实际存在的常规文件的链接:
find DIR1 -type l -xtype f -ls
从 xtype 选项的“查找”(LINUX)文档中:“对于符号链接,-xtype 检查 -type 不检查的文件的类型”
此选项将显示指向实际存在的目录的符号链接:
find DIR1 -type l -xtype d -ls
一种 bash 解决方案:
find . -type l -print | while read src
do
[[ -e "$src" ]] && echo $src
done
所以,找到所有符号链接并检查是否存在,如果存在 -> 回显它