xargs -I选项


12

xargs的手册说:

-I replace-str
--replace [= replace-str]
-i [replace-str]
用从标准输入中读取的名称替换初始参数中出现的replace-str。

我不明白这部分内容: with names read from standard input.

例如发生了什么事:

find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l

上面的代码计算了目录中的文件/目录总数。

有人可以帮我解释一下吗?

Answers:


20

“使用从标准输入中读取的名称”表示xargs将数据输入到其标准输入中,将其拆分,然后使用其运行其自变量中给出的命令。默认情况下,它以空格或换行符分隔,并一次运行echo带有尽可能多的参数。

-0您示例中的选项指示xargs将其输入拆分为空字节,而不是空白或换行符。具有组合find-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

以获得更好的理解。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.