xargs
將參數(shù)作為標(biāo)準(zhǔn)輸入傳遞給指定程序。它的一個(gè)應(yīng)用場(chǎng)景是:一些程序無法從管道中讀取輸入,比如rm
、kill
等等,在需要使用管道時(shí),可以使用xargs
命令。
下面的例子中,ls -l
命令并不會(huì)理會(huì)now.txt
,而是直接輸出目錄中的文件列表:
$ echo 'now.txt' | ls -l
total 2072
-rw-rw-r-- 1 tom tom 2097152 Jun 12 14:43 2M.file
drwxrwxrwx 2 tom tom 4096 May 31 16:42 a
-rwxrwxr-x 1 tom tom 10 Jun 12 14:56 a.txt
drwxrwxrwx 2 tom tom 4096 May 29 2017 bin
drwxrwxrwx 5 tom tom 4096 Jun 5 17:25 homework
drwxrwxrwx 3 tom tom 4096 May 12 10:37 name
-rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt
可以使用xargs
處理這個(gè)情況,用管道將echo
輸出傳給xargs
作為參數(shù),xargs
將這些參數(shù)作為ls -l
的標(biāo)準(zhǔn)輸入:
$ echo 'now.txt' | xargs ls -l
-rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt
-i
命令選項(xiàng)使xargs
具有插入功能,使用{}
代表參數(shù)的占位符:
$ find -maxdepth 1 -type f '!' -name '.*' | xargs -i mv {} ./backups/{}.bk
這條命令尋找當(dāng)前目錄中所有的普通文件,并將其移動(dòng)到./backups
目錄中,每個(gè)文件被添加后綴名.bk
。
使用-t
命令選項(xiàng)顯示具體執(zhí)行的命令:
$ echo "now.txt.bk" | xargs -t ls -l
ls -l now.txt.bk
-rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt.bk
在一些情況下,xargs
沒有從管道中得到內(nèi)容,但是其之后的命令還是會(huì)運(yùn)行:
$ find ./ -empty
$ find ./ -empty | xargs ls -l
total 2056
-rw-rw-r-- 1 tom tom 2097152 Jun 12 14:43 2M.file.bk
-rwxrwxr-x 1 tom tom 10 Jun 12 14:56 a.txt.bk
-rwxrwxr-x 1 tom tom 14 Jun 12 12:18 now.txt.bk
使用-r
命令參數(shù)避免這種情況:
$ find ./ -empty | xargs -r ls -l
$