2012-10-11 12 views
8

Ho foto in più directory. Voglio usare jpegtran (strumento a riga di comando) per recursivly passare attraverso ciascuno di essi, ottimizzarlo e salvarlo (sovrascrivere)Come utilizzare in modo ricorsivo JpegTran (riga di comando) per ottimizzare tutti i file in sottodirectory?

se sono tutti in una cartella io uso questo

for JPEG in *.jpg ; do jpegtran -optimize $JPEG > $JPEG; done 

ma io non riesco a farlo funzionare in modo ricorsivo e sovrascrivendo lo stesso file (anziché un nuovo nome file)

qualche consiglio?

risposta

5

ne dite di usare il comando find:

find /your/dir -name '*.jpg' -exec echo jpegtran -optimize {} \; 

eseguire il comando, se ti piace l'uscita, rimuovere echo per eseguirlo.

+0

jpegtran ha output predefinito su stdout. –

3

Di solito è molto più facile da usare trovare in questi casi, perché ciò che si vuole fare è atto su un paio di nomi di file. L'utilità find ti darà quei nomi. Supponendo che tu abbia strumenti GNU (o forse anche BSD), il seguente esempio illustrerà questo scenario comune.

Ad esempio:

$ find ~/images/wallpapers/TEMP/ -type f -iname '*jpg' \ 
    -exec sh -c 'jpegtran -outfile {}.out -optimize {}; mv {}.out {} ' \; 
  1. trovare sembra per tutti i file che terminano con jpg nella cartella TEMP, in modo ricorsivo.
  2. Per ogni percorso completo del file trovati (indicato con `{} '), trovare verrà eseguito il comando dato a -exec
  3. i trucchi di opzione -exec e corre diversi comandi al posto di uno a sh

Note

cat file > file non è consentito perché rea contemporaneamente da e la scrittura sullo stesso file non è un'operazione ben definita o supportata in bash.

22

jpegtran whole directory

find /the/image/path -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \; 
+0

Oups down votato per errore –

+0

noooooooooo !!! ;) – Bas

Problemi correlati