如何一次性删除损坏的符号链接?

run*_*el0 27 bash find symlink

我已经创建了大量日志文件的符号链接。日志文件的语法是yyyymmdd.log.gz.

为了简化事情,我使用了一个简单的序列而不用解析它date

for dd in $(seq -w 20150101 20151231) ; do 
     ln -s $origin/$dd.log.gz $target/$dd.log.gz
done
Run Code Online (Sandbox Code Playgroud)

如何摆脱我刚刚创建的所有损坏的符号链接?

run*_*el0 53

这个简单的一个衬垫可以非常快地完成这项工作,需要 GNU find

find . -xtype l -delete
Run Code Online (Sandbox Code Playgroud)

一点解释:

-xtype l测试断开的链接(与 相反-type

-delete 直接删除文件,无需进一步打扰xargs-exec

注意:-xtype l 表示 -xtype小写L(如链接中所示);)

GNU Findutils:查找

  • 如果您想显示正在删除的内容的列表,请使用“-print -delete”。 (3认同)

小智 7

find -L /path -type l -exec rm -i {} \;
Run Code Online (Sandbox Code Playgroud)

使用-L,find尝试遵循符号链接来评估-type测试。如果它成功跟踪链接,则该链接没有断开,并且-type l测试将是错误的(因为它是针对链接解析的事物进行评估的)。如果跟随链接失败,则链接断开并且-type l测试为真。

如果-type l测试成功,则-exec rm {} \;删除断开的链接。

建议使用-xtype lGNUism,主要针对 Linux 用户,不适用于非 GNU UNIX 系统,如 Solaris、FreeBSD 等。