该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
上面的代码计算了目录中的文件/目录总数。
有人可以帮我解释一下吗?
“使用从标准输入中读取的名称”表示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
以获得更好的理解。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句