前言:我了解-exec {} \;
&的区别-exec {} +
。我也没有问题,因为这样,我只是好奇的语义find
。
当-exec
以+
而不是结束参数时;
,我们需要以结束{} +
,例如:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
;
在这些示例中使用代替+
可以很好地工作(但显然可以做其他事情)。
从POSIX:
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +
...仅在紧随仅包含两个字符“
{}
” 的参数之后的<plus-sign> 将标点主表达式的末尾。<加号>的其他用途不应视为特殊用途。
换句话说,使用时+
,该命令需要与结束{} +
。
为什么是这样?为何只用+
而不用;
?起初,我想也许是为了避免与包含的文件名发生冲突+
,但是;
看起来似乎可以正常工作的文件名?我发现很难相信这个限制是任意的...
The "-exec ... {} +" syntax adopted was a result of
IEEE PASC Interpretation 1003.2 #210
在该文档中,您将找到更多详细信息,例如:Note that the "+" is only treated as special if it immediately follows "{}". This minimises the chances of causing problems with existing uses of "+" as an argument with "-exec".