首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >xargs -I选项

xargs -I选项
EN

Unix & Linux用户
提问于 2016-05-11 01:31:02
回答 1查看 29.6K关注 0票数 20

xargs手册说:

-I替换-str --替换=替换-str -i替换-str替换在初始参数中出现的替换-str,并从标准输入中读取名称。

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

例如,正在发生的情况如下:

代码语言:javascript
复制
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l

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

有人能为我解释一下吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2016-05-11 04:32:40

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

示例中的-0选项指示xargs将其输入拆分为空字节,而不是空白或换行符。结合find's -print0,可以正确处理包含空格或换行符的文件名。

-I选项改变了构建新命令行的方式。xargs将不再一次添加尽可能多的参数,而是每次从其输入中取一个名称,查找给定的令牌(此处为{}),并将其替换为名称。

在您的示例中,{}不存在于提供给xargs的命令模板中,因此实际上,xargs被指示在没有参数的情况下运行echo,对于find给它的每个文件名都要运行一次。要查看此,请删除wc

代码语言:javascript
复制
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo

你会看到一系列空白行..。把这个和

代码语言:javascript
复制
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}

代码语言:javascript
复制
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo

代码语言:javascript
复制
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0

以获得更好的理解。

票数 34
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/282403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档