Exec позволяет нам передавать все аргументы одновременно {} +или передавать их по одному{} \;
Теперь предположим, что я хочу переименовать все в формате JPEG , без проблем это сделать:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
Но если мне нужно перенаправить вывод, '{}'не доступен после перенаправления.
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
Это не сработает. Я должен был бы использовать цикл for, сохраняя результаты поиска в переменную перед использованием. Допустим, это громоздко.
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
Так есть ли лучший способ?
{}появляются в более длинных строках, так как такие строки обычно не раскрываются.
find, один раз и применяется к самой findкоманде. В {}этом контексте не имеет особого значения. Перенаправление не является аргументом findи, конечно же, не является частью -execпредложения.
>пропущенного в третьем примере кода?