xargs 命令
简介
xargs 命令用于从标准输入中构建执行管道和执行命令行。像
grep 命令等可以从接受管道输入作为参数,而其他工具,像
echo, rm, mkdir, ls
等却不能。我们可以借助 xargs 来使他们接受管道输入作为参数。
使用
默认情况下,xargs
从由空格分隔的标准输入中读取项,并对每个参数执行一次命令。
下面例子中通过管道将标准输入传递给
xargs,然后它执行每个参数。
1 | echo "one two three" | xargs mkdir |
xargs 与 find 配合使用
xrags 最常见的用法就是和 find
一起使用。一般是使用 find 来搜索文件和目录,然后使用
xargs 来处理结果。典型的例子是改变所有权或者移动文件。
下面例子中,查找 2 周以前的文件,然后通过管道将结果传给
xargs 来进行删除操作。
sudo find /tmp -mtime +10|xargs rm -f
报错提示:
1 | sudo find /tmp -mtime +10|xargs rm |
原因: find 查找的结果集为空,导致 rm
接受到空参数
xargs v exec
find 命令支持 -exec 选项来对结果执行任意的操作。
下面两个版本的效果是一致的:
1 | find ./foo -type f -name "*.txt" -exec rm -f {} \; |
一些测试(见文末参考资料)表示 xargs 比
exec {} 快六倍
打印执行的命令
-t 选项打印每一条将会在终端执行的命令。
例如:
1 | echo 'one two three' | xargs -t rm -rf |
打印并提示询问命令
-p 选项会打印要执行的命令,并提示用户是否执行
1 | echo 'one two three' | xargs -p touch |