xargs命令来自于英文词组"extended arguments"的缩写,其功能是用于给其他命令传参数的过滤器;
xargs命令能够处理从标准输入或管道符输入的数据,并将其转换成命令参数。也可以将单行或多行输入的文本转换成其他格式;
xargs命令可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行;
xargs命令默认接收的信息中,空格是默认定界符,所以可以接收包含换行和空白的内容;
xargs命令是构建单行命令的重要组件之一。

1、功能说明
给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具
2、语法格式
xargs [选项]
3、选项解释
-n 多行输出,指定每行的最大参数量n,可以将标准输入的文本划分为多行,每行n个参数,默认空格分割
-d 自定义分割符
-i 以{}替代前面的结果
-I 指定一个符号替换替代前面的结果
-t 打印出 xargs 执行的命令
-p 执行每一个命令时弹出确认,y执行 n不执行
-0 用null代替空格作为分割符,配合find命令的-print0选项的输出使用
4、参考实例
准备数据test3.txt
hello world welcome learn
ma nong xin rui
good good learn
day day up
- 多行输入单行输出
[root@xn ~]# xargs < test3.txt
[root@xn ~]# cat test3.txt | xargs //两个命令效果是一样的
hello world welcome learn ma nong xin rui good good learn day day up
- 打印出xargs 执行的命令
[root@xn ~]# cat test3.txt | xargs -t
/bin/echo hello world welcome learn ma nong xin rui good good learn day day up
hello world welcome learn ma nong xin rui good good learn day day up
- 使用 -n 进行多行输出
[root@xn ~]# xargs -n 3 < test3.txt
[root@xn ~]# cat test3.txt|xargs -n3
hello world welcome
learn ma nong
xin rui good
good learn day
day up
- 使用-d选项 可以自定义一个分割符
[root@xn ~]# echo "name=name=name=name"|xargs -d = //以=号做分割符
name name name name
- 结合-n使用,规定输出的行数
[root@xn ~]# echo "name=name=name=name"|xargs -d = -n 2 //以=号做分割符
name name
name name
- 设定每一次输出信息时,都需要用户手动确认后再显示到终端界面
[root@xn ~]# echo "name=name=name=name"|xargs -d= -n 2 -p
echo name name ?...
echo name name
?...
echo ?...
- 用符号{}替代前面输出的结果
[root@xn ~]# cat test3.txt |xargs -i echo {}
hello world welcome learn
ma nong xin rui
good good learn
day day up
- 指定符号替代前面输出的结果
[root@xn ~]# cat test3.txt |xargs -I [] echo []
hello world welcome learn
ma nong xin rui
good good learn
day day up
5、补充说明
参数-i只能用符号{}替代前面输出的结果,
而参数-I是可以指定符号替代前面输出的结果。
建议用-I,因为有些系统不支持-i
> 会覆盖目标的原有内容。当文件存在时会先删除原文件,再重新创建文件,然后把内容写入该文件;否则直接创建文件。
>> 会在目标原有内容后追加内容。当文件存在时直接在文件末尾进行内容追加,不会删除原文件;否则直接创建文件。
< 表示的是输入重定向的意思,就是把<后面跟的文件取代键盘作为新的输入设备。
| 表示一个管道的意思,可以理解为东西从管道的一边流向另外一
6、拓展命令
复制所有图片文件到/local/images目录下:
ls *.jpg | xargs -n1 -I {} cp {} /local/images
把日志移动到特定目录下
find . -name "*.log" | xargs -I {} mv {} test
统计一个源代码目录中所有java文件的行数
find . -type f -name "*.java" -print0 | xargs -0 wc -l
查找所有的后缀是.log文件,并且压缩它们
find . -type f -name "*.log" -print | xargs tar -czvf log.tar.gz
7、后言
拓展命令中用到了find命令,这也是个很重要很常用的命令,后期会安排上。
转载请注明:XAMPP中文组官网 » Linux命令之xargs