xargs,是execute arguments的缩写,它的作用是从标准输入中读取内容,并将 此内容传递给它要协助的命令,并作为那个命令的参数来执行。
$ cat /etc/passwd | grep root
# grep命令可以接受标准输入作为参数
大多数命令都不接受标准输入作为参数,只能直接在命令行输入参数,这导致无法用管道命令传递参数
echo "one two three" | xargs mkdir
# mkdir one two three
find . -name '*.log' -print0 | xargs -0 rm -f
xargs提供了-0选项,允许将NULL作为分隔符,而find命令也心有灵犀地提供了对应的选项来产生以NULL字符作为分隔符的输出。
find命令提供的对应方法是-print0选项,在文件名之后输出NULL,而不像-print选项那样输出换行符(换行符会被xargs替换成空格)。
xargs的-0选项不仅可以将分隔符从默认的空格变成NULL,还会将单引号、双引号、反斜线等统统默认为是普通字符。所以说,-0选项特别适合处理命令参数中含有引号、空格、反斜线的情况.
$ 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