Exec ci consente di passare tutti gli argomenti contemporaneamente {} +o di passarli uno alla volta con{} \;
Ora diciamo che voglio rinominare tutto jpeg , nessun problema nel farlo:
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec mv '{}' '{}'.new \;
Ma se devo reindirizzare l'output, '{}'non è accessibile dopo il reindirizzamento.
find . \( -name '*.jpg' -o -name '*.jpeg' \) -exec cjpeg -quality 80 '{}' > optimized_'{}' \;
Questo non funzionerebbe. Dovrei usare un ciclo for, archiviando l'output di find in una variabile prima di usarlo. Ammettiamolo, è ingombrante.
for f in `find . \( -name '*.jpg' -o -name '*.jpeg' \)`; do cjpeg -quality 80 $f > optimized_$f; done;
Quindi c'è un modo migliore?
{}appare una stringa più lunga in quanto tali stringhe non vengono generalmente espanse.
find, una volta, e applicato al findcomando stesso. Non {}ha un significato speciale in quel contesto. Il reindirizzamento non è un argomento finde certamente non fa parte della -execclausola.
>nel terzo codice?