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

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

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

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

对比

find .... -exec ... + 

答案1

-exec ... \;将逐个运行项目。因此,如果您有三个文件,则 exec 行将运行三次。

-exec ... {} +适用于可以一次处理多个文件的命令(例如,,cat)。通过 找到的文件像命令一样链接在一起。这意味着更少的分叉,对于小操作来说,意味着显着的速度提升。statlsfindxargs

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

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

相关内容