我想确定目录中所有损坏的符号链接。
由于不知道更好的解决方案,我尝试了这个简单的 bash one-liner(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";
按预期工作,所以问题似乎是循环。
我错过了什么?
我怀疑问题出在
ls
它的输出中使用了颜色。由于您正在解析 的ls
输出,如果ls
输出颜色,则相应的转义码将以给定的值结束f
,并且test
将无法找到匹配的文件。由于test
在这种情况下没有任何输出而无法通过测试,因此您不会变得更聪明。改为使用 glob:
请参阅如何找到损坏的符号链接以获取针对您的潜在问题的其他可能解决方案。