我想知道当我在命令中使用时,使用+
和命令;
结束之间有什么区别?-exec
find
find .... -exec ... \;
Run Code Online (Sandbox Code Playgroud)
VS
find .... -exec ... +
Run Code Online (Sandbox Code Playgroud)
Oli*_*Oli 40
-exec ... \;
将一个接一个地运行。因此,如果您有三个文件,则 exec 行将运行 3 次。
-exec ... {} +
用于一次可以处理多个文件的命令(例如cat
, stat
, ls
)。找到的文件find
像xargs
命令一样链接在一起。这意味着更少的分叉,对于小型操作,可能意味着显着的加速。
这是一个包含 10,000 个空文件的性能演示。
$ mkdir testdir
$ touch testdir/{0000..9999}
$ time find testdir/ -type f -exec cat {} \;
real 0m8.622s
user 0m0.452s
sys 0m8.288s
$ time find testdir/ -type f -exec cat {} +
real 0m0.052s
user 0m0.015s
sys 0m0.037s
Run Code Online (Sandbox Code Playgroud)
同样,这仅适用于可以采用多个文件名的命令。您可以通过查看其联机帮助页来确定您的命令是否与此类似。以下是摘自man cat
:
SYNOPSIS
cat [OPTION]... [FILE]...
Run Code Online (Sandbox Code Playgroud)
省略号[FILE]...
表示它可以包含多个文件。
+
只能用于单个命令,并且您必须{}
在行中恰好有一个。\;
可以与多个零对多组一起操作。