Vorwort: Ich verstehe den Unterschied zwischen -exec {} \;& -exec {} +. Ich habe auch kein Problem als solches , ich bin nur neugierig auf die Semantik von find.
Wenn das Ende -execmit dem Argumente +statt ;, wir müssen dazu am Ende mit {} +, zum Beispiel:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
Die Verwendung ;in diesen Beispielen anstelle von +funktioniert gut (macht aber offensichtlich etwas anderes).
Von POSIX :
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +... Nur ein <plus-sign>, das unmittelbar auf ein Argument folgt, das nur die beiden Zeichen "
{}" enthält, darf das Ende des primären Ausdrucks markieren. Andere Verwendungen des <plus-sign> werden nicht als besonders behandelt.
Mit anderen Worten, wenn die Verwendung +der Befehl muss mit beenden {} +.
Warum ist das? Und warum nur mit dem +und nicht mit dem ;? Zuerst dachte ich, vielleicht um Konflikte mit Dateinamen zu vermeiden, die ein enthalten +, aber Dateinamen mit einem ;scheinen gut zu funktionieren? Es fällt mir schwer zu glauben, dass diese Einschränkung willkürlich ist ...
The "-exec ... {} +" syntax adopted was a result ofIEEE PASC Interpretation 1003.2 #210und in diesem Dokument finden Sie weitere Details, zB: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".