xargs -I 选项

xargs -I 选项

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

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

有人能为我解释一下吗?

答案1

“使用从标准输入读取的名称”意味着xargs获取标准输入中传入的数据,将其拆分,并使用它来运行其参数中给出的命令。默认情况下,它按空格或换行符进行分割,并echo一次使用尽可能多的参数运行。

-0示例中的选项指示将xargs其输入拆分为空字节而不是空格或换行符。与finds结合使用-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

以获得更好的理解。

相关内容