find 的 -exec 命令中的 {} + 是什么意思?

find 的 -exec 命令中的 {} + 是什么意思?

我想知道命令{} +中的含义,以及和exec之间的区别。确切地说,这两者有什么区别:{} +{} \;

find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;

答案1

为了终止/调用的 shell 命令,必须使用;(分号)或(加号) 。+-execexecdir

;(分号)或(加号)之间的区别在于+参数如何传递到 find 的-exec/-execdir参数中。例如:

  • 使用;将执行多个命令(对于每个参数分别),

    例子:

    $ find /etc/rc* -exec echo Arg: {} ';'
    Arg: /etc/rc.common
    Arg: /etc/rc.common~previous
    Arg: /etc/rc.local
    Arg: /etc/rc.netboot
    

    以下所有参数都find被视为该命令的参数。

    该字符串{}将替换为当前正在处理的文件名。

  • 使用+将执行尽可能少的命令(因为参数组合在一起)。它与xargs命令的工作方式非常相似,因此它将在每个命令中使用尽可能多的参数,以避免超出每行参数的最大限制。

    例子:

    $ find /etc/rc* -exec echo Arg: {} '+'
    Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
    

    命令行是通过在末尾附加每个选定的文件名来构建的。

    {}命令中只允许出现一个 的实例。

也可以看看:

答案2

假设命令 find 获取以下三个文件:

fileA
fileB
fileC

-exec如果与加号 ( +)一起使用,

find . -type f -exec chmod 775 {} +  

这将是:

chmod 775 fileA fileB fileC

xargs命令行是通过在末尾附加每个匹配的文件名来构建的,这与构建命令行的方式相同。命令的调用总数(chmod在本例中为 )将远小于匹配文件的数量。

-exec如果与分号 ( ) 一起使用;

find . -type f -exec chmod 775 {} \;

这将是:

chmod 775 fileA
chmod 775 fileB
chmod 775 fileC

答案3

按照man find

-执行命令{} +-exec 操作的此变体对所选文件运行指定的命令,但命令行是通过在末尾附加每个所选文件名来构建的;该命令的调用总数将远小于匹配的文件数。命令行的构建方式与 xargs 构建其命令行的方式大致相同。命令中只允许出现一个“{}”实例。该命令在起始目录中执行。

相关内容