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 find
comando stesso. Non {}
ha un significato speciale in quel contesto. Il reindirizzamento non è un argomento find
e certamente non fa parte della -exec
clausola.
>
nel terzo codice?