xargs手册说:
-I替换-str --替换=替换-str -i替换-str替换在初始参数中出现的替换-str,并从标准输入中读取名称。
我不明白这部分:with names read from standard input.
例如,正在发生的情况如下:
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo | wc -l上面的代码计算目录中的文件/目录总数。
有人能为我解释一下吗?
发布于 2016-05-11 04:32:40
“使用从标准输入读取的名称”意味着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
复制相似问题