作为整洁的系统管理员,我们希望确保小事情与大事情一样好(在时间允许的情况下).其中一个原因是确保我们的系统没有完整的符号链接.
为什么这些小捣蛋鬼有问题?因为它们会让你认为文件存在时它们不存在,它们可能表示更烦人的事情,并且因为我(小)的OCD部分在运行某些命令时(例如grep -r)对所有这些警告都是疯狂的. ).
那么,如何检测(并通过电子邮件或监控系统报告)管理员负责的系统各部分的断开链接(没有一点告诉我~jbloggs有一堆破损的符号链接,那是他的问题)?
-L的问题在于它具有将搜索扩展到作为符号链接目标的子目录的副作用,这可能是不期望的或期望的.
使用GNU findutils版本的find:
<!-- language: bash --> find /path/to/search -xtype l
除了没有找到循环符号链接.
另一个答案中的-execdir不是可移植的,所以将其提取到一个便携式解决方案,找到破坏的符号链接,包括循环链接:
<!-- language: bash --> find /path/to/search -type l -exec test ! -e {} \; -print
有关进一步的讨论,请参见this question或ynform.org.有关详细信息,请参阅findutils documentation. ynform.org链接还提供了一种仅检测循环链接的方法.