一、基本用法
xargs命令的作用,是將標準輸入轉為命令列引數,
原因:大多數命令都不接受標準輸入作為引數,只能直接在命令列輸入引數,這導致無法用管道命令傳遞引數
如下面 echo 不接受標準輸出做引數,可用 xargs 做轉換:
$ echo "hello world" | xargs echo
hello world
二、引數
-d 指定分隔符
默認情況下,xargs將換行符和空格作為分隔符,把標準輸入分解成一個個命令列引數,
$ echo "one two three" | xargs mkdir
上面代碼中,mkdir會新建三個子目錄,執行mkdir one two three,
-d引數可以更改分隔符
$ echo -e "a\tb\tc" | xargs -d "\t" echo
a b c
上面的命令指定制表符\t作為分隔符,所以a\tb\tc就轉換成了三個命令列引數,echo命令的-e引數表示解釋轉義字符,
-p -t列印將要執行的命令
-p引數列印出要執行的命令,詢問用戶是否要執行,
$ echo 'one two three' | xargs -p touch
touch one two three ?...
-t引數則是列印出最終要執行的命令,然后直接執行,不需要用戶確認,
$ echo 'one two three' | xargs -t rm
rm one two three
-I 傳遞引數起別名
如果xargs要將命令列引數傳給多個命令,可以使用-I引數,【貌似,會按空格或回車對引數進行分割,然后重復執行命令,而不是當成命令的多個引數】
-I指定每一項命令列引數的替代字串,
$ cat foo.txt
one
two
three
$ cat foo.txt | xargs -I file sh -c 'echo file; mkdir file'
one
two
three
$ ls
one two three
上面代碼中,foo.txt是一個三行的文本檔案,我們希望對每一項命令列引數,執行兩個命令(echo和mkdir),使用-I file表示file是命令列引數的替代字串,執行命令時,具體的引數會替代掉echo file; mkdir file里面的兩個file,
-l -L 指定多少行作為一個命令列引數
$ echo -e "a\nb\nc" | xargs -L 1 echo
a
b
c
-n 指定一行內多項作為一個命令列引數
$ echo {0..9} | xargs -n 2 echo
0 1
2 3
4 5
6 7
8 9
--max-procs 多執行緒執行
xargs默認只用一個行程執行命令,如果命令要執行多次,必須等上一次執行完,才能執行下一次,
--max-procs引數指定同時用多少個行程并行執行命令,--max-procs 2表示同時最多使用兩個行程,--max-procs 0表示不限制行程數,
$ docker ps -q | xargs -n 1 --max-procs 0 docker kill
上面命令表示,同時關閉盡可能多的 Docker 容器,這樣運行速度會快很多
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/538369.html
標籤:其他
