xargs – build and execute command lines from standard input
從標準輸入構建和執行命令行?看不懂,先直接來看一個範例.
root@ubuntu:~/test# find ./ -type f -exec grep Ben {} \; Ben ben bEn root@ubuntu:~/test# find ./ -type f -exec grep -l Ben {} \; ./test.txt
find 參數
-type f
找出屬性為檔案 f (file) ,還可針對目錄 d (directory) -type d ,連結 l (softlink) -type l來尋找.
-exec
將之前的結果轉向 grep -l Ben 來處理 , {} 表示之前的結果 , \; 結束.
上面的指令可以使用 xargs 取代
root@ubuntu:~/test# find ./ -type f | xargs grep Ben ./test.txt:Ben ben bEn
xargs 指令會標準輸入(standard input)讀取資料,並以空白字元做分隔.
root@ubuntu:~/test# find ./ -type f ./test.txt ./test2.txt ./test1.txt
使用 xargs 之後,所有搜尋出來的資料會變成一整串字串 (使用空白鍵做分隔).
root@ubuntu:~/test# find ./ -type f | xargs ./test.txt ./test2.txt ./test1.txt
-p, –interactive
xargs使用方式是將指令放在參數之後
root@ubuntu:~/test# find ./ -type f | xargs -p grep Ben grep Ben ./test.txt ./test2.txt ./test1.txt ?...y ./test.txt:Ben ben bEn
參數 -p, –interactive
使用者可以先確認指令 並使用 ‘Y’或`Y’ 決定是否運行該指令.
-n, max-args
使用者還可以自行決定指令所使用的參數個數.
root@ubuntu:~/test# find ./ -type f | xargs -p -n 1 grep Ben grep Ben ./test.txt ?...y Ben ben bEn grep Ben ./test2.txt ?...y grep Ben ./test1.txt ?...y
參數 -n, max-args
設定一次可運行指令所使用的參數個數上限值,預設值為1.
-r, –no-run-if-empty
下面的例子是 find 找不到任何東西,但 xargs 還是會去執行後面的指令,使用參數 -r 可以避免.
root@ubuntu:~/test# find ./ -name *.dff | xargs -p grep Ben grep Ben ?...y root@ubuntu:~/test# find ./ -name *.dff | xargs -p -r grep Ben
參數 -r, –no-run-if-empty
不運行命令如果標準輸入為空白.
-t, –verbose
參數 -t 可以讓使用者得知 xargs 是執行了什麼指令.
root@ubuntu:~/test# find ./ -type f | xargs -t grep Ben grep Ben ./test.txt ./test2.txt ./test1.txt ./test.txt:Ben ben bEn
參數 -t, –verbose
在執行結果前輸出 xargs 執行的指令為何.
沒有解決問題,試試搜尋本站其他內容
One thought on “Linux command – xargs”