7

我已经能够找到一个命令来获取损坏链接的列表,而不是“工作”符号链接

find -H mydir -type l

我该怎么做相反的事情?

如果我有这些文件mydir

foo
bar
bob
carol

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

foo
bar
carol
4

3 回答 3

5

随着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 下的所有语言中执行的操作。有关“如何查找断开的链接”相关问题的完整答案,请参见此博客文章。)

于 2012-07-20T22:44:43.263 回答
2

这将仅显示(LINUX)符号链接,这些链接是指向实际存在的常规文件的链接:

find DIR1 -type l -xtype f -ls

从 xtype 选项的“查找”(LINUX)文档中:“对于符号链接,-xtype 检查 -type 不检查的文件的类型”

此选项将显示指向实际存在的目录的符号链接:

find DIR1  -type l -xtype d -ls
于 2012-07-20T22:35:20.470 回答
1

一种 bash 解决方案:

find . -type l -print | while read src
do
    [[ -e "$src" ]] && echo $src
done

所以,找到所有符号链接并检查是否存在,如果存在 -> 回显它

于 2012-07-20T22:39:20.343 回答