Xargs

xargs -I 選項

  • May 11, 2016

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

以獲得更好的理解。

引用自:https://unix.stackexchange.com/questions/282403