功能说明:向其他命令传递命令行参数的一个过滤器,能够将管道或者标准输入传递的数据转换成xargs命令后跟随的命令的命令行参数。
选项说明:
-n 指定每行的最大参数量,可以将标准输入的文本划分为多行,每行n个参数,默认为空五个分割。
-d 自定义分隔符。
-i 以{} 替代前面的结果。
-I 指定一个符号替代前面的结果,而不用-i参数默认的 {} 。
-p 提示让用户确认是否执行后的命令,y执行,n不执行。
-0(数字0) 用null代替空格作为分隔符,配合find命令的 -print0选项的输出作用。
范例1.多行输入变单行的例子
[root@restoredb ~]# cat test.log
1 2 3 4 5 6
7 8 9
10 11
[root@restoredb ~]# xargs < test.log
1 2 3 4 5 6 7 8 9 10 11
范例2.通过-n指定每行的输出个数的例子
[root@restoredb ~]# cat test.log
1 2 3 4 5 6
7 8 9
10 11
[root@restoredb ~]# xargs -n 3 < test.log
1 2 3
4 5 6
7 8 9
10 11
范例3.自定义分隔符(使用-d功能)的例子
[root@restoredb ~]# echo splitXsplitXsplitXsplitX
splitXsplitXsplitXsplitX
[root@restoredb ~]# echo splitXsplitXsplitXsplitX|xargs -d X
split split split split
[root@restoredb ~]# echo splitXsplitXsplitXsplitX|xargs -d X -n 2
split split
split split
范例4.参数-i 可以让{} 代替前面find命令找到的文件或目录
find . -name "*.log" |xargs -i mv {} /tmp/
范例5.参数-I 可以指定一个替换的字符串
find . -name "*.log" |xargs -I [] cp [] /tmp
范例6.结合find使用xargs的特殊案例
首先模拟创建
[root@restoredb temp]# ls
[root@restoredb temp]# ls
[root@restoredb temp]# touch "hello word.txt"
[root@restoredb temp]# ls
hello word.txt
[root@restoredb temp]# touch hello everyone.txt
[root@restoredb temp]# ll
total 0
-rw-r--r-- 1 root root 0 Jul 17 23:04 hello everyone.txt
-rw-r--r-- 1 root root 0 Jul 17 23:04 hello word.txt
使用常规方法,发现并不能删除
[root@restoredb temp]# find . -type f -name "*.txt"|xargs rm
rm: cannot remove ‘./hello’: No such file or directory
rm: cannot remove ‘word.txt’: No such file or directory
rm: cannot remove ‘./hello’: No such file or directory
rm: cannot remove ‘everyone.txt’: No such file or directory
必须使用-0 选项,以字符null分割输出
[root@restoredb temp]# find . -type f -name "*.txt" -print0|xargs -0 rm -f
[root@restoredb temp]# ls
[root@restoredb temp]#