Xargs
xargs -I 選項
xargs 手冊說:
-I 替換
-str –replace
$$ =replace-str $$
-一世$$ replace-str $$
將初始參數中出現的 replace-str 替換為從標準輸入中讀取的名稱。
我不明白這部分:
with names read from standard input.
例如發生了什麼:
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l
上面的程式碼計算了目錄中的文件/目錄總數。
有人可以為我解釋一下嗎?
“使用從標準輸入讀取的名稱”意味著
xargs
獲取來自其標準輸入的數據,將其拆分,並使用它來執行其參數中給出的命令。預設情況下,它以空格或換行符分割,並echo
一次執行盡可能多的參數。您範例中的
-0
選項指示xargs
將其輸入拆分為空字節而不是空格或換行符。find
與’s結合使用-print0
,可以正確處理包含空格或換行符的文件名。該
-I
選項更改了新命令行的建構方式。與其一次添加盡可能多的參數,不如xargs
從其輸入中一次取一個名稱,查找給定的標記({}
此處)並將其替換為該名稱。在您的範例中,
{}
不存在於給定的命令模板中xargs
,因此實際上xargs
指示在echo
沒有參數的情況下執行,對於find
. 要看到這一點,請刪除wc
:find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo
你會看到一系列的空白行…比較一下
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}
和
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo
和
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0
以獲得更好的理解。