Prefácio: Entendo a diferença entre -exec {} \;& -exec {} +. Eu também não tenho um problema como tal , estou apenas curioso sobre a semântica de find.
Ao finalizar o -execargumento com em +vez de ;, precisamos finalizar com {} +, por exemplo:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
Usar ;esses exemplos em vez de +funcionar bem (mas obviamente faz outra coisa).
Do POSIX :
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +... Somente um <plus-sign> que segue imediatamente um argumento contendo apenas os dois caracteres "
{}" deve pontuar o final da expressão primária. Outros usos do <plus-sign> não devem ser tratados como especiais.
Em outras palavras, ao usar o +, o comando precisa terminar com {} +.
Por que é isso? E por que apenas com +e não o ;? No começo, pensei em talvez evitar conflitos com nomes de arquivos que contenham a +, mas nomes de arquivos com a ;parecem funcionar bem? Acho difícil acreditar que essa limitação é arbitrária ...
The "-exec ... {} +" syntax adopted was a result ofIEEE PASC Interpretation 1003.2 #210e nesse documento você encontrará mais detalhes, por exemplo: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".