原文地址:http://blog.csdn.net/chenzrcd/article/details/50186881
1、作用:
(1)将前一个命令的标准输出传递给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符
(2)将多行输入转换为单行
2、使用模式:front command | xargs -option later command
front command: 前一个命令
-option: xargs的选项
later command: 后一个命令
3、xargs常用选项
-n: 指定一次处理的参数个数
-d: 自定义参数界定符
-p: 询问是否运行 later command 参数
-t : 表示先打印命令,然后再执行
-i : 逐项处理
...更多参数查看man xargs
4、使用实例
测试文本:xargs.txt
- a b c d e f g
- h i j k l m n
- o p q
- r s t
- u v w x y z
(1)多行输入单行输出
- cat xargs.txt | xargs
( 2)指定一次处理的参数个数:指定为5,多行输出
- cat xargs.txt | xargs -n 5
(3)自定义参数界定符:指定界定符为'm'
- cat xargs.txt | xargs -d m
(4)询问是否运行 later command 参数
- cat xargs.txt | xargs -n 5 -p
(5)将所有文件重命名,逐项处理每个参数
- ls *.txt |xargs -t -i mv {} {}.bak
更多参数选项查看man xargs
5、xargs与管道|的区别
| 用来将前一个命令的标准输出传递到下一个命令的标准输入,xargs 将前一个命令的标准输出传递给下一个命令,作为它的参数。
- #使用管道将ls的结果显示出来,ls标准输出的结果作为cat的标准输出
- ls | cat
- #使用xargs将ls的结果作为cat的参数,ls的结果为文件名,所以cat 文件名即查看文件内容
- ls | xargs cat
6、xargs与exec的区别
(1)exec参数是一个一个传递的,传递一个参数执行一次命令;xargs一次将参数传给命令,可以使用-n控制参数个数
- #xargs将参数一次传给echo,即执行:echo begin ./xargs.txt ./args.txt
- find . -name '*.txt' -type f | xargs echo begin
- #exec一次传递一个参数,即执行:echo begin ./xargs.txt;echo begin ./args.txt
- find . -name '*.txt' -type f -exec echo begin {} \;
(2)exec文件名有空格等特殊字符也能处理;xargs不能处理特殊文件名,如果想处理特殊文件名需要特殊处理
- #find后的文件名含有空格
- find . -name '*.txt' -type f | xargs cat
- find . -name '*.txt' -type f -exec cat {} \;
- #xargs处理特殊文件名
- find . -name '*.txt' -type f -print0 | xargs -0 cat