该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
Run Code Online (Sandbox Code Playgroud)
上面的代码计算目录中的文件/目录总数。
有人可以为我解释一下吗?
Ste*_*itt 27
“使用从标准输入读取的名称”意味着xargs
接收进入其标准输入的数据,将其拆分,并使用它来运行其参数中给出的命令。默认情况下,它在空格或换行符处拆分,并一次运行echo
尽可能多的参数。
-0
您示例中的选项指示xargs
将其输入拆分为空字节而不是空格或换行符。结合find
's -print0
,这允许正确处理包含空格或换行符的文件名。
该-I
选项更改了构建新命令行的方式。不是一次添加尽可能多的参数,而是xargs
从输入中一次取一个名称,查找给定的标记({}
此处)并将其替换为名称。
在您的示例中,{}
不存在于给定的命令模板中xargs
,因此实际上xargs
被指示echo
不带参数运行,对于find
. 要看到这一点,请删除wc
:
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo
Run Code Online (Sandbox Code Playgroud)
你会看到一系列空行......比较这个
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0I{} echo {}
Run Code Online (Sandbox Code Playgroud)
和
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0 echo
Run Code Online (Sandbox Code Playgroud)
和
find . -mindepth 1 -maxdepth 1 -print0 | xargs -0
Run Code Online (Sandbox Code Playgroud)
以获得更好的理解。
归档时间: |
|
查看次数: |
19703 次 |
最近记录: |