我想确定目录中所有损坏的符号链接。
由于不知道更好的解决方案,我尝试了这个简单的 bash 单行(bash 版本是 4.2.46,可能值得一提,因为它有点过时):
for f in $(ls); do test -L "$f" || continue; test -e "$f" || echo "$f deadlink"; done
不幸的是这不起作用。我尝试确定错误,如果我运行这个
for f in $(ls); do test -L $f && echo "$f is a valid symlink"; done
尽管存在有效的符号链接,但不会产生任何输出。如果我运行相同的命令并$f
替换为实际文件名,它就可以工作。也f=filename; test -L $f && echo "$f is a valid symlink";
按预期工作,因此问题似乎出在循环上。
我缺少什么?
答案1
我怀疑问题来自于ls
在其输出中使用颜色。既然你是解析ls
的输出,如果ls
输出颜色,相应的转义码将最终出现在给定的值中f
,并且test
将无法找到匹配的文件。由于test
在这种情况下测试失败且没有任何输出,因此您不会变得更明智。
使用 glob 代替:
for f in *; do test -L "$f" || continue; test -e "$f" || echo "$f deadlink"; done
看如何找到损坏的符号链接针对您的根本问题的其他可能的解决方案。