以下命令来自https://www.tecmint.com/xargs-command-examples/示例 #9。就是从当前目录中删除与 *gz 不匹配的文件。
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
-print0
arg of find
command-0
和-I {}
args of command的目的是什么xargs
?为什么需要它们?谢谢!
以下命令来自https://www.tecmint.com/xargs-command-examples/示例 #9。就是从当前目录中删除与 *gz 不匹配的文件。
$ find . -type f -not -name '*gz' -print0 | xargs -0 -I {} rm -v {}
-print0
arg of find
command-0
和-I {}
args of command的目的是什么xargs
?为什么需要它们?谢谢!
-print0
告诉find
输出由空字节而不是通常的换行符分隔的结果。如果文件名本身(或将来可能)包含换行符,则这是必要的。然后,您需要告诉
xargs
以空分隔的数据从管道中传出——这就是它的-0
用途。-print0
所以在 LHS 上使用时这里是必要的。同时
{}
是一个替换字符串 - 当您使用 时-I {}
,以下命令中的每个{}
将被替换为一个输入项。仅当您需要控制项目在以下命令行中的显示位置时才真正有必要(并且具有为每个项目运行单个调用的副作用,相当于添加-L 1
)。恕我直言,这里没有必要,并且使解决方案效率低下,因为它rm
为找到的每个文件运行一次,而不是分批运行。请注意,
find
有一个-exec
选项和一个-delete
选项都可以完全避免写入/读取分隔数据的问题:或者
(
-print
此处提供与-v
选项类似的功能rm
)。