我想知道命令{} +
中的含义,以及和exec
之间的区别。确切地说,这两者有什么区别:{} +
{} \;
find . -type f -exec chmod 775 {} +
find . -type f -exec chmod 775 {} \;
答案1
为了终止/调用的 shell 命令,必须使用;
(分号)或(加号) 。+
-exec
execdir
;
(分号)或(加号)之间的区别在于+
参数如何传递到 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 构建其命令行的方式大致相同。命令中只允许出现一个“{}”实例。该命令在起始目录中执行。