使用“+”(加号)和“;”有什么区别 (分号)在 -exec 命令中?

αғs*_*нιη 32 find

我想知道当我在命令中使用时,使用+和命令;结束之间有什么区别?-execfind

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)。找到的文件findxargs命令一样链接在一起。这意味着更少的分叉,对于小型操作,可能意味着显着的加速。

这是一个包含 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]...表示它可以包含多个文件。

+只能用于单个命令,并且您必须{}在行中恰好有一个。\;可以与多个零对多组一起操作。

  • 示例:使用`\;`,执行的命令将是`cat 1; 猫 2; 猫3`。使用`+`,执行的命令将是`cat 1 2 3`。 (4认同)
  • @SimonRichter:不,`-exec ... {} +` 是 POSIX。请参阅:http://pubs.opengroup.org/onlinepubs/9699919799/utilities/find.html#tag_20_47_05 (2认同)