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 -exec
mit 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 of
IEEE PASC Interpretation 1003.2 #210
und 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".