作用
xargs,是execute arguments的缩写,它的作用是从标准输入中读取内容,并将 此内容传递给它要协助的命令,并作为那个命令的参数来执行。
与管道的区别
- 管道可以实现:将前面的标准输出作为后面的 标准输入
- 管道无法实现:将前面的标准输出作为后面的 命令参数
$ cat /etc/passwd | grep root
# grep命令可以接受标准输入作为参数
大多数命令都不接受标准输入作为参数,只能直接在命令行输入参数,这导致无法用管道命令传递参数
echo "one two three" | xargs mkdir
# mkdir one two three
分隔符
- xargs会将前一个命令的标准输出转换成命令参数,但很多人可能不知道的是,xargs的标准输入中出现的“换行符、空格、制表符”都将被空格取代
- xargs默认的分隔符是空格
- 还可以使用-d选项来指定任何一个符号作为分隔符
find and xargs
代码语言:javascript复制find . -name '*.log' -print0 | xargs -0 rm -f
xargs提供了-0选项,允许将NULL作为分隔符,而find命令也心有灵犀地提供了对应的选项来产生以NULL字符作为分隔符的输出。
find命令提供的对应方法是-print0选项,在文件名之后输出NULL,而不像-print选项那样输出换行符(换行符会被xargs替换成空格)。
xargs的-0选项不仅可以将分隔符从默认的空格变成NULL,还会将单引号、双引号、反斜线等统统默认为是普通字符。所以说,-0选项特别适合处理命令参数中含有引号、空格、反斜线的情况.
other options
- p 参数打印出要执行的命令,询问用户是否要执行
- I 要将命令行参数传给多个命令
$ cat foo.txt
one
two
three
# -I file表示file是命令行参数的替代字符串
$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one
two
three
$ ls
one two three