共计 1170 个字符,预计需要花费 3 分钟才能阅读完成。
一、根本用法
xargs
命令的作用,是将规范输出转为命令行参数。
起因:大多数命令都不承受规范输出作为参数,只能间接在命令行输出参数,这导致无奈用管道命令传递参数
如上面 echo 不承受规范输入做参数,可用 xargs 做转换:
$ echo "hello world" | xargs echo
hello world
二、参数
-d
指定分隔符
默认状况下,xargs
将换行符和空格作为分隔符,把规范输出分解成一个个命令行参数。
$ echo "one two three" | xargs mkdir
下面代码中,mkdir
会新建三个子目录,执行mkdir one two three
。
-d
参数能够更改分隔符
$ echo -e "a\tb\tc" | xargs -d "\t" echo
a b c
下面的命令指定制表符 \t
作为分隔符,所以 a\tb\tc
就转换成了三个命令行参数。echo
命令的 -e
参数示意解释转义字符。
-p -t
打印将要执行的命令
-p
参数打印出要执行的命令,询问用户是否要执行。
$ echo 'one two three' | xargs -p touch
touch one two three ?...
-t
参数则是打印出最终要执行的命令,而后间接执行,不须要用户确认。
$ echo 'one two three' | xargs -t rm
rm one two three
-I
传递参数起别名
如果 xargs
要将命令行参数传给多个命令,能够应用 -I
参数。【貌似,会按空格或回车对参数进行宰割,而后反复执行命令,而不是当成命令的多个参数】
-I
指定每一项命令行参数的代替字符串。
$ cat foo.txt
one
two
three
$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one
two
three
$ ls
one two three
下面代码中,foo.txt
是一个三行的文本文件。咱们心愿对每一项命令行参数,执行两个命令(echo
和 mkdir
),应用-I file
示意 file
是命令行参数的代替字符串。执行命令时,具体的参数会代替掉 echo file; mkdir file
外面的两个file
。
-l -L
指定多少行作为一个命令行参数
$ echo -e "a\nb\nc" | xargs -L 1 echo
a
b
c
-n
指定一行内多项作为一个命令行参数
$ echo {0..9} | xargs -n 2 echo
0 1
2 3
4 5
6 7
8 9
--max-procs
多线程执行
xargs
默认只用一个过程执行命令。如果命令要执行屡次,必须等上一次执行完,能力执行下一次。
--max-procs
参数指定同时用多少个过程并行执行命令。--max-procs 2
示意同时最多应用两个过程,--max-procs 0
示意不限度过程数。
$ docker ps -q | xargs -n 1 --max-procs 0 docker kill
下面命令示意,同时敞开尽可能多的 Docker 容器,这样运行速度会快很多