加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 删除所有破碎的符号链接一行?

发布时间:2020-12-15 18:56:18 所属栏目:安全 来源:网络整理
导读:对于给定的文件夹,如何删除其中的所有损坏的链接? 我发现this answer显示如何删除一个断开的链接,但我不能把它放在一行.这是一个一线吗? 破坏的符号是指向不再存在的文件/文件夹的链接. 这是一种POSIX方法,可以删除当前目录中的所有破坏的符号链接,而无需
对于给定的文件夹,如何删除其中的所有损坏的链接?

我发现this answer显示如何删除一个断开的链接,但我不能把它放在一行.这是一个一线吗?

破坏的符号是指向不再存在的文件/文件夹的链接.

这是一种POSIX方法,可以删除当前目录中的所有破坏的符号链接,而无需递归.它通过告诉发现遍历符号链接(-L),但停止(-prune)在每个目录或符号链接到这样.
find -L . -name . -o -type d -prune -o -type l -exec rm {} +

您也可以使用shell循环.测试-L匹配符号链接,-e匹配现有文件(不包括破坏的符号链接).

for x in * .[!.]* ..?*; do if [ -L "$x" ] && ! [ -e "$x" ]; then rm -- "$x"; fi; done

如果你想递归到子目录,这种技术不起作用.使用GNU find(在非嵌入式Linux和Cygwin中可以找到),您可以使用-xtype谓词来检测破坏的符号链接(-xtype使用目标的类型进行符号链接,并报告断开的链接).

find -xtype l -delete

POSIXly,您需要组合两个工具.您可以使用find-type l -exec …来调用每个符号链接上的命令,以及[-e“$x”]来测试该链接是否被破坏.

find . -type l -exec sh -c 'for x; do [ -e "$x" ] || rm "$x"; done' _ {} +

最简单的方法是使用zsh.删除当前目录中的所有破坏的符号链接:

rm -- *(-@D)

括号中的字符为glob qualifiers: – 取消引用符号链接,@仅匹配符号链接(组合 – @表示仅限破坏的符号链接)和D匹配点文件.要递归到子目录,使rm – ** / *( – @ D).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读