Przedmowa: Rozumiem różnicę między -exec {} \;& -exec {} +. Ja też nie mam problemu jako takiego , jestem po prostu ciekawy temat semantyki find.
Kiedy kończy się -execargument, ze +zamiast ;, to trzeba z tym skończyć z {} +, na przykład:
# FreeBSD find
$ find . -type f -exec cp {} /tmp +
find: -exec: no terminating ";" or "+"
# GNU find is even more cryptic:
$ find: missing argument to `-exec'
Zastosowanie ;w tych przykładach zamiast +działa dobrze (ale oczywiście robi coś innego).
Z POSIX :
-exec utility_name [argument ...] ;
-exec utility_name [argument ...] {} +... Tylko <plus-sign>, który następuje bezpośrednio po argumencie zawierającym tylko dwa znaki „
{}”, interpunktuje koniec wyrażenia podstawowego. Inne zastosowania <plus-sign> nie będą traktowane jako specjalne.
Innymi słowy, podczas korzystania +z polecenia polecenie musi się kończyć {} +.
Dlaczego to? A dlaczego tylko z, +a nie z ;? Na początku pomyślałem, że może powinienem unikać konfliktów z nazwami plików, które zawierają +, ale nazwy plików z ;wyglądają dobrze. Trudno mi uwierzyć, że to ograniczenie jest arbitralne ...
The "-exec ... {} +" syntax adopted was a result ofIEEE PASC Interpretation 1003.2 #210i w tym dokumencie znajdziesz więcej szczegółów, np .: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".