Answers:
为了终止/ 调用的shell命令,必须使用;
(分号)或+
(加号)。-exec
execdir
;
(分号)或+
(加号)之间的区别在于参数如何传递到find的-exec
/ -execdir
参数中。例如:
using ;
将执行多个命令(每个参数分别执行),
例:
$ find /etc/rc* -exec echo Arg: {} ';'
Arg: /etc/rc.common
Arg: /etc/rc.common~previous
Arg: /etc/rc.local
Arg: /etc/rc.netboot
后面的所有自变量
find
均被视为命令的自变量。该字符串
{}
将替换为当前正在处理的文件名。
using +
将执行最少的命令(因为参数组合在一起)。这与xargs
命令的工作原理非常相似,因此它将在每个命令中使用尽可能多的参数,以避免超出每行参数的最大限制。
例:
$ find /etc/rc* -exec echo Arg: {} '+'
Arg: /etc/rc.common /etc/rc.common~previous /etc/rc.local /etc/rc.netboot
通过在每个末尾附加每个选定的文件名来构建命令行。
命令中仅
{}
允许的一个实例。
也可以看看:
鉴于命令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
man find(1)
了详细描述,任何人都可以轻松找到它。别偷懒