xargs简单使用

用家目录下的文件做演示:

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

 

上一篇:oracle 合并函数(listagg 、wm_concat)


下一篇:一位云架构师用服务打动客户的故事之八「顾问式销售的三把武器」