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ę -exec
argument, 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 of
IEEE PASC Interpretation 1003.2 #210
i 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".