使用 xargs 删除不匹配模式的文件

洛根·李

以下命令来自https://www.tecmint.com/xargs-command-examples/示例 #9。就是从当前目录中删除与 *gz 不匹配的文件。

$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}

-print0arg of findcommand-0-I {}args of command的目的是什么xargs为什么需要它们?谢谢!

钢铁司机

-print0告诉find输出由空字节而不是通常的换行符分隔的结果。如果文件名本身(或将来可能)包含换行符,则这是必要的。

然后,您需要告诉xargs以空分隔的数据从管道中传出——这就是它的-0用途。-print0所以在 LHS 上使用时这里是必要的。

同时{}是一个替换字符串 - 当您使用 时-I {},以下命令中的每个{}将被替换为一个输入项。仅当您需要控制项目在以下命令行中的显示位置时才真正有必要(并且具有为每个项目运行单个调用的副作用,相当于添加-L 1)。恕我直言,这里没有必要,并且使解决方案效率低下,因为它rm为找到的每个文件运行一次,而不是分批运行。

请注意,find有一个-exec选项和一个-delete选项都可以完全避免写入/读取分隔数据的问题:

find . -type f -not -name '*gz' -exec rm -v {} +

或者

find . -type f -not -name '*gz' -print -delete

-print此处提供与-v选项类似的功能rm)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章