用家目录下的文件做演示:
allen@toshiba:test$ ll ~
总用量 0
drwxr-xr-x 2 allen allen 6 9月 13 20:58 Desktop
drwxr-xr-x 2 allen allen 6 9月 13 20:58 Documents
drwxr-xr-x 2 allen allen 6 9月 14 19:05 Downloads
drwxr-xr-x 2 allen allen 6 9月 13 20:58 Music
drwxr-xr-x 2 allen allen 20 9月 14 12:23 Pictures
drwxr-xr-x 2 allen allen 6 9月 13 20:58 Public
drwxr-xr-x 2 allen allen 6 9月 13 20:58 Templates
drwxr-xr-x 2 allen allen 6 9月 13 20:58 Videos
如果直接使用xargs:
allen@toshiba:test$ ls ~ | xargs
Desktop Documents Downloads Music Pictures Public Templates Videos
allen@toshiba:test$ ls ~ | xargs echo
Desktop Documents Downloads Music Pictures Public Templates Videos
可以发现,xargs使用echo作为默认命令,所以加不加echo一样的效果。
还有,xargs默认一次性把参数全都执行结束了,所以我们加上参数-n:
allen@toshiba:test$ ls ~ | xargs -n1
Desktop
Documents
Downloads
Music
Pictures
Public
Templates
Videos
allen@toshiba:test$ ls ~ | xargs -n2
Desktop Documents
Downloads Music
Pictures Public
Templates Videos
如果希望在执行前询问下,可以加-p:
allen@toshiba:test$ ls ~ | xargs -p
echo Desktop Documents Downloads Music Pictures Public Templates Videos ?...y
Desktop Documents Downloads Music Pictures Public Templates Videos
xargs默认是用空格作为参数分隔符的,如果遇到这种情况:
allen@toshiba:test$ echo 1,2,3,4 | xargs
1,2,3,4
allen@toshiba:test$ echo 1,2,3,4 | xargs -d"," -n1
1
2
3
4
xargs总是把参数加到命令的最后,有的时候希望加在指定的位置,这个时候就需要-I(是i的大写)了:
allen@toshiba:test$ ls ~ | xargs -n1 -I{} mkdir -p all/{}
allen@toshiba:test$ tree
.
└── all
├── Desktop
├── Documents
├── Downloads
├── Music
├── Pictures
├── Public
├── Templates
└── Videos