2012-03-10 6 views
23

Ho molte immagini che vorrei elaborare con pngquant. Sono organizzati in una struttura di directory piuttosto profondo, quindi è molto tempo per manualmente cd in ogni directory ed eseguire pngquant -ext .png -force 256 *.pngRecuperare i file di processo in batch con pngquant

C'è un modo per ottenere questo comando da eseguire su ogni * .png in ogni directory all'interno della quello attuale, quanti strati profondi sono necessari?

+1

Cosa operativo in su? – Manish

risposta

47

Se si dispone di limitata profondità di directory e non troppi file, soluzione poi pigro:

pngquant *.png */*.png */*/*.png 

una soluzione standard:

find . -name '*.png' -exec pngquant --ext .png --force 256 {} \; 

e la versione multi-core:

find . -name '*.png' -print0 | xargs -0 -P8 -L1 pngquant --ext .png --force 256 

dove -P8 definisce il numero di CPU e -L1 definisce un numero di immagini da elaborare in una chiamata pngquant (io uso -L4 per le cartelle con molte piccole immagini da salvare all'avvio del processo).

+2

'trova. -name '* .png' -exec pngquant -ext .png -force 256 {} \; 'funziona magnificamente per me. Grazie. – cmal

+0

Grazie per la risposta, ha funzionato come un fascino per me. Tuttavia, potresti spiegare la sintassi relativa al numero di core? È un'opzione pngquant o un'opzione del sistema operativo che divide le attività e dà alcune immagini a ciascun thread? – Nicolas

+0

@Stewie è l'opzione 'xargs' 'che indica di eseguire il numero di attività in parallelo. – Kornel

13

Con il fish shell è possibile eseguire il seguente dalla radice della directory del progetto

pngquant **.png 

che genererà i nuovi file con estensioni come -or8.png o -fs8.png.

Se si desidera sovrascrivere i file esistenti, è possibile utilizzare

sistema
pngquant **.png --ext .png --force