(1)将前一个命令的标准输出通报给下一个命令,作为它的参数,xargs的默认命令是echo,空格是默认定界符
(2)将多行输入转换为单行
2、利用模式:

front command | xargs -option latercommand
front command: 前一个命令
-option: xargs的选项
later command: 后一个命令
一样平常与管道“|”结合利用
3、xargs常用选项
-n: 指定一次处理的参数个数
-d: 自定义参数界定符
-p: 讯问是否运行 later command 参数
-t : 表示先打印命令,然后再实行
-i : 逐项处理
...更多参数查看man xargs
4、xargs与管道|的差异
管道“|” 用来将前一个命令的标准输出通报到下一个命令的标准输入。
xargs 将前一个命令的标准输出通报给下一个命令,作为它的参数。
可见,标准输入与命令参数是不同的。个人理解,命令参数便是直接跟在命令后面的,标准输入可以是键盘,文件等。
以是,管道符 | 所通报给程序的不是大略地在程序名后面输入的参数,它们会被程序内部的读取功能如scanf和gets等吸收,而xargs则是将内容作为普通的参数通报给程序,相称于直接跟在命令后面。况且,有些命令是不接管标准输入的,比如kill,rm等命令。
总结:管道符后不加xargs相称于先将xargs后面的命令回车实行一下再从键盘里输入管道符前面命令实行的结果内容
加上xargs 相称于实行命令(xargs后面的命令)后,直接从键盘输入管道符前面命令实行的结果内容再回车,即管道前面的结果直接跟在xargs 后面的命令后面
再总结一下,便是回车的先后顺序不太一样。
5、xargs与-exec的差异
-exec:{}表示命令的参数即为所找到的文件,以;表示comman命令的结束。\是转义符,
由于分号在命令中还有它用场,以是就用一个\来限定表示这是一个分号而不是表示其它意思。
-ok: 和 -exec 的浸染相同,格式也一样,只不过以一种更为安全的模式来实行该参数
所给出的shell给出的这个命令之前,都会给出提示,让用户来确定是否实行。
#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 {} \;
xargs 要结合管道来完成
格式:find [option] express |xargs command
很明显,exec是对每个找到的文件实行一次命令,除非这单个的文件名超过了几k,否则不
会涌现命令行超长出报错的问题。
而xargs是把所有找到的文件名一股脑的转给命令。当文件很多时,这些文件名组合成的命
令行参数很随意马虎超长,导致命令出错。
其余, find | xargs 这种组合在处理有空格字符的文件名时也会出错,由于这时实行的命令
已经不知道哪些是分割符、哪些是文件名中的空格!
而用exec则不会有这个问题。
总结
比较之下,也不丢脸出各自的缺陷
1、exec 每处理一个文件或者目录,它都须要启动一次命令,效率不好;
2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \; 作为命令的结束符,书写不便。
3、xargs 不能操作文件名有空格的文件;
4、exec参数是一个一个通报的,通报一个参数实行一次命令;xargs一次将参数传给命令,可以利用-n掌握参数个数
5、exec文件名有空格等分外字符也能处理;xargs不能处理分外文件名,如果想处理分外文件名须要分外处理
综上,如果要利用的命令支持一次处理多个文件,并且也知道这些文件里没有带空格的文件,
那么利用 xargs比较方便; 否则,就要用 exec了。