Answers:
-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
同样,这仅适用于可以使用多个文件名的命令。您可以通过查看其手册来确定命令是否类似。这是来自的摘要man cat
:
SYNOPSIS
cat [OPTION]... [FILE]...
省略号[FILE]...
表示可以使用多个文件。
+
只能在单个命令上使用,并且{}
一行中必须恰好有一个。\;
可以与多个零对多组操作。
+
不是POSIX,因此在非Linux系统上可能不可用。如果您从不离开平台,就不必担心,但是很高兴知道您是否曾经使用过Solaris。:)
-exec <command> {} ';'
因为它使我的打字更容易(我可以触摸打字,但我并不是最好的技术)。
-exec ... {} +
是POSIX。请参阅:pubs.opengroup.org/onlinepubs/9699919799/utilities/...
-exec ... {} +
扩展建议于2001年被包含在POSIX规范中,并于2004 年被批准为POSIX第6期。您所习惯的Solaris版本可能比该POSIX标准更旧(或者仅针对较早的版本)。
\;
,执行的命令将是cat 1; cat 2; cat 3
。使用+
,执行的命令将是cat 1 2 3
。