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


28

我想知道当我在命令中使用时,使用+;-exec命令结尾之间有什么区别find

find .... -exec ... \; 

VS

find .... -exec ... + 

Answers:


36

-exec ... \;将一个接一个地运行。因此,如果您有三个文件,则exec行将运行3次。

-exec ... {} +是对于可以在同一时间取一个以上的文件的命令(例如catstatls)。找到的文件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

同样,这仅适用于可以使用多个文件名的命令。您可以通过查看其手册来确定命令是否类似。这是来自的摘要man cat

SYNOPSIS
       cat [OPTION]... [FILE]...

省略号[FILE]...表示可以使用多个文件。

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


4
例如:with \;,执行的命令将是cat 1; cat 2; cat 3。使用+,执行的命令将是cat 1 2 3
Alaa Ali 2014年

AFAIK,+不是POSIX,因此在非Linux系统上可能不可用。如果您从不离开平台,就不必担心,但是很高兴知道您是否曾经使用过Solaris。:)
Simon Richter 2014年

哦,很好,谢谢您的信息。我通常是-exec <command> {} ';'因为它使我的打字更容易(我可以触摸打字,但我并不是最好的技术)。
hanetzer 2014年

2
@SimonRichter:不,-exec ... {} +是POSIX。请参阅:pubs.opengroup.org/onlinepubs/9699919799/utilities/...
cuonglm

@SimonRichter该-exec ... {} +扩展建议于2001年包含在POSIX规范中,并于2004 年被批准为POSIX第6期。您所习惯的Solaris版本可能比该POSIX标准更旧(或者仅针对较早的版本)。
奥利(Oli)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.