O Exec nos permite passar todos os argumentos de uma só vez {} +
ou passá-los um por um com{} \;
Agora, digamos que eu queira renomear todos os jpeg , não há problema em fazer isso:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
Mas se eu precisar redirecionar a saída, '{}'
não estará acessível após o redirecionamento.
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
Isso não funcionaria. Eu precisaria usar um loop for, armazenando a saída do find em uma variável antes de usá-la. Vamos admitir, é complicado.
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
Então, existe uma maneira melhor?
{}
aparecem em cadeias mais longas, pois essas cadeias geralmente não são expandidas.
find
, uma vez, e aplicado ao find
próprio comando. O {}
não tem significado especial nesse contexto. O redirecionamento não é um argumento find
e certamente não faz parte da -exec
cláusula.
>
falta no terceiro exemplo de código?