將Linux命令的結果做爲下一個命令的參數

KISS:keep it short and simple! html

1. 符號:` `
名稱:反引號,上分隔符
位置:反引號(`)這個字符通常在鍵盤的左上角,數字1的左邊,不要將其同單引號(’)混淆
做用:反引號括起來的字符串被shell解釋爲命令行,在執行時,shell首先執行該命令行,並以它的標準輸出結果取代整個反引號(包括兩個反引號)部分
舉例: shell

$ echo `date` 
Thu Mar 7 21:31:11 CST 2013

2. $() 
效果同` ` 工具

3. 命令:xargs
xargs是給命令傳遞參數的一個過濾器,也是組合多個命令的一個工具。它把一個數據流分割爲一些足夠小的塊,以方便過濾器和命令進行處理。一般狀況下,xargs從管道或者stdin中讀取數據,可是它也可以從文件的輸出中讀取數據。xargs的默認命令是echo,這意味着經過管道傳遞給xargs的輸入將會包含換行和空白,不過經過xargs的處理,換行和空白將被空格取代。 spa

$ date | xargs echo
Thu Mar 7 21:47:12 CST 2013

管道與xargs的區別: .net

  • 管道是實現「將前面的標準輸出做爲後面的標準輸入」
  • xargs是實現「將標準輸入做爲命令的參數」
4. find命令的-exec參數

xargs:經過緩衝方式並之前面命令行的輸出做爲參數,隨後的命令調用該參數
若忽略 xargs 的 options 來看的話,
cm1 | xargs cm2
能夠單純當作: cm2 `cm1`
所以, find .... | xargs rm 也可做 rm `find ...` 來處理.
然而, 若 find 的結果太多, 可能會超過rm 可能接受的最大argument數量而失敗.
xargs優勢:因爲是批處理的,因此執行效率比較高(經過緩衝方式)
xargs缺點:有可能因爲參數數量過多(成千上萬),致使後面的命令執行失敗
若換成 find .... -exec   rm {} \; 的話, 
由於rm 是" 逐個 " item 去處理的, 則無此憂慮
命令行

參考:

如何將Linux命令的結果做爲下一個命令的參數
Linux xargs命令
管道命令和xargs的區別(經典解釋)
exec 與 xargs的區別

相關文章
相關標籤/搜索