在Linux系统的命令行中,我们都知道“|” (管道符)是用于将一个命令的输出连接到另一个命令的输入,但当我们需要将标准输入中的数据作为参数传递命令时,或者需要更复杂的数据处理和参数构建时,使用xargs最好不过了。
xargs(英文全拼:eXtended ARGuments): 是给命令传递参数的一个过滤器,也是组合命令的一个工具。
它能够读取来自任何标准输入的数据,并将其做为参数传递给另一个命令。xargs可以用于执行各种任务,包括像文件操作、数据过滤、批量处理等。之所以能用到这个命令,关键是由于很多命令不支持| (管道符)来传递参数,而日常工作中有个必要,所以就有了这个xargs这个强大的命令。
命令格式 :
some_command | xargs another_command
参数:
-a file 从文件中读入作为stdin (标准输入)
-e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止
-n num 设置多行输出
-t 显示xargs执行的命令
-I 或-i 设置替换字符串,一般是一行一行赋值给{},可以用{}代替
-d delim分隔符,默认的xargs时回车,argument的分隔符是空格,这里修改的是xargs的分隔符。
-r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了
举例:
使用xargs批量修改文件名
touch a b c d
ls | xargs -I{} mv {} {}.bak
ls
a.bak b.bak c.bak d.bak
xargs 用作替换工具,读取输入数据重新格式化后输出。
定义一个测试文件,内有多行文本数据:
#cat test.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
多行输入单行输出:
#cat test.txt | xargs
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
-n 多行输出 :
#cat test.txt | xargs -n3
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
-d选项可以定义一个定界符:
#echo "hotXhotXhotXhot" | xargs -dX
hot hot hot hot
-d与-n结合
#echo "hotXhotXhotXhot" | xargs -dX -n2
hot hot
hot hot
xargs结合find使用:
#如果用rm删除太多的文件时,可能会得到一个错误的信息:/bin/rm Argument list too long. 此时,就可以用xargs去避免这个问题:
find . -type f -name "*.log" -print0 | xargs -0 rm -f
#查找所有的 jpg 文件,并且压缩它们
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz
其他
#如果一个文件包含了很多你希望下载的 URL,你能够使用 xargs下载所有链接:
cat url-list.txt | xargs wget -c