Prefazione: capisco la differenza tra -exec {} \;& -exec {} +. Inoltre non ho un problema in quanto tale , sono solo curioso della semantica di find.
Quando si termina l' -execargomento con +anziché anziché ;, è necessario terminarlo con {} +, ad esempio:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
L'uso ;in questi esempi invece di +funziona benissimo (ma ovviamente fa qualcos'altro).
Da POSIX :
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +... Solo un <plus-sign> che segue immediatamente un argomento contenente solo i due caratteri "
{}" deve punteggiare la fine dell'espressione primaria. Gli altri usi di <plus-sign> non devono essere considerati speciali.
In altre parole, quando si utilizza il +, il comando deve terminare con {} +.
Perchè è questo? E perché solo con il +e non il ;? All'inizio ho pensato forse di evitare conflitti con i nomi di file che contengono un +, ma i nomi di file con un ;sembrano funzionare bene? Trovo difficile credere che questa limitazione sia arbitraria ...
The "-exec ... {} +" syntax adopted was a result ofIEEE PASC Interpretation 1003.2 #210e in quel documento troverai maggiori dettagli, ad esempio: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".