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

时间:2012-07-20 22:27:43

标签: unix symlink

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

find -H mydir -type l

我怎么能这样做呢?

如果我在mydir中有这些文件:

foo
bar
bob
carol

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

foo
bar
carol

3 个答案:

答案 0 :(得分:4)

使用find(1)

$ find . -type l -not -xtype l

此命令查找在关注后停止链接的链接 - 即不间断链接。 (请注意,它们可能指向普通或特殊文件,目录或其他。使用-xtype f而不是-not -xtype l来查找指向普通文件的链接。)

$ find . -type l -not -xtype l -ls

报告他们指向的地方。

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

% echo **/*(@^-@)

遵循相同的想法:Glob qualifier @限制链接,^-@表示“不是^”链接(@)已启用(-)。

(另请参阅this post about finding broken links in python,实际上这展示了您可以在Linux下的所有语言中执行的操作。请参阅this blog post以获取有关“如何找到已损坏”相关问题的完整答案 links“。)

答案 1 :(得分:2)

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

find DIR1 -type l -xtype f -ls

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

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

find DIR1  -type l -xtype d -ls

答案 2 :(得分:1)

一个bash解决方案:

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

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