我想知道這有什麼區別
ls | xargs rm
ls | xargs -i{} rm {}
兩者都為我工作
答案1
xargs rm
將rm
使用所有參數作為以空格分隔的參數進行呼叫。
xargs -i{} rm {}
將調用rm {}
每個參數並將{}
被當前參數替換。
如果你有 2 個參數a.txt
和b.txt
,xargs rm
將會呼叫此
rm a.txt b.txt
但xargs -i{} rm {}
會打電話
rm a.txt
rm b.txt
這是因為-i
選項意味著-L 1
選項,這意味著該命令每次rm
只使用行。1
這裡每一行只包含 1 個參數。
檢查這個IDEONE 連結以獲得更多關於它的想法。
答案2
-i
option (相當於--replace
)建立一種佔位符,其中 xargs 儲存剛剛收到的輸入。在第二個指令中,佔位符是{}
,它的作用類似於 find-exec
選項。定義後,xargs 將用整行輸入取代此佔位符。如果您不喜歡這個{}
名稱,您可以定義自己的名稱:
ls | xargs -iPLACEHOLDER echo PLACEHOLDER
在您的情況下,兩個命令都會產生相同的結果。在第二種形式中,您只是使用該-I
選項明確顯示預設行為。
答案3
使用大括號,它將為rm
每個檔案產生一個進程。如果沒有大括號,xargs
將向每個命令傳遞盡可能多的檔案名稱rm
。
比較
ls | xargs echo
和
ls | xargs -I {} echo {}