之所以能用到这个命令,关键是由于一些命令不支持 | (管道) 来传递参数。比如
ls | echo #结果是空白 因为 ls 的结果 没有通过 | 传递给echo
ls | xargs echo #正常输出了echo的结果
xargs选项:
-0 : 处理一些特殊元字符
# ls New\ file
New file (当前目录下 有一个 New file 文件,两个单词直接有空格)
#find . -name '*file' | xargs rm (查找当前文件下以file结尾的文件,删除它)
rm: 无法删除"./New": 没有那个文件或目录
rm: 无法删除"file": 没有那个文件或目录
(因为 xargs以空白字元作为分割,所以有一些档案名含有空白字元时,xargs会误判)
正确的做法是:
find . -name '*file' | xargs -0 rm
-a file: 从文件中读入作为标准输入
#cat test
hello world
#xargs -a test echo
hello world
-E flag : flag必须是一个以空格分隔的标志,当xargs分析到含有这个flag这个标志的时候就停止
#cat txt | xargs -E 'shou' echo
bin tao
-p : 交互模式
# cat txt | xargs -p echo
echo bin tao shou lun ?...y
bin tao shou lun
-n num: num代表次数,表示命令在执行的时候一次用一个参数,默认是用所有参数
# cat txt | xargs -n 1 echo
bin
tao
shou
lun
#$ cat txt | xargs echo
bin tao shou lun
-t : 代表先打印命令,然后在执行
# cat txt | xargs -t echo
echo bin tao shou lun
bin tao shou lun
-i 或 -I 看linux的支持,将xargs的每项名称,一行一行的赋值给{ }
# ls -l
-rwxrwxrwx 1 root root 0 4月 17 22:28 1
-rwxrwxrwx 1 root root 0 4月 17 22:28 2
-rwxrwxrwx 1 root root 0 4月 17 22:28 3
-rwxrwxrwx 1 root root 0 4月 17 22:28 4
-rwxrwxrwx 1 root root 0 4月 17 22:28 5
#ls | xargs -i {} {}.bak
# ls
1.bak 2.bak 3.bak 4.bak 5.bak
-r : 当xargs的输入为空的时候则停止xargs
# echo "" | xargs mv
mv: 缺少了文件操作数
# echo "" | xargs -r mv