我想知道当我在命令中使用时,在命令末尾使用+
和有什么区别?;
-exec
find
find .... -exec ... \;
对比
find .... -exec ... +
答案1
-exec ... \;
将逐个运行项目。因此,如果您有三个文件,则 exec 行将运行三次。
-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]...
表示它可以容纳多个文件。
+
{}
只能在单个命令中使用,并且行中必须只有一个。\;
可以与多个零对多组一起操作。