前言:我了解-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 ofIEEE 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".