La soluzione migliore sarebbe usare ImageMagick.
Non sono un esperto nell'uso effettivo, ma so che puoi praticamente fare qualsiasi cosa relativa alle immagini con questo!
Un esempio è:
convert image.png image.jpg
che manterrà l'originale oltre a creare l'immagine convertita.
Per quanto riguarda la conversione batch, penso che tu debba utilizzare lo strumento Mogrify che fa parte di ImageMagick.
Tieni presente che questo sovrascrive le vecchie immagini.
Il comando è:
mogrify -format jpg *.png
Ho un altro paio di soluzioni.
La soluzione più semplice è come la maggior parte già pubblicata. Un semplice bash for loop.
for i in *.png ; do convert "$i" "${i%.*}.jpg" ; done
Per qualche ragione tendo ad evitare i loop in bash, quindi ecco un approccio xargs più unixy, usando bash per la manipolazione dei nomi.
ls -1 *.png | xargs -n 1 bash -c 'convert "$0" "${0%.*}.jpg"'
Quello che uso. Utilizza GNU Parallel per eseguire più lavori contemporaneamente, offrendoti un aumento delle prestazioni. È installato di default su molti sistemi ed è quasi sicuramente nel tuo repository (è un buon programma da avere in giro).
ls -1 *.png | parallel convert '{}' '{.}.jpg'
Il numero di lavori predefinito è il numero di core della CPU che hai. Ho riscontrato un migliore utilizzo della CPU utilizzando 3 lavori sul mio sistema dual-core.
ls -1 *.png | parallel -j 3 convert '{}' '{.}.jpg'
E se vuoi qualche statistica (un ETA, lavori completati, tempo medio per lavoro...)
ls -1 *.png | parallel --eta convert '{}' '{.}.jpg'
C'è anche una sintassi alternativa se stai usando GNU Parallel.
parallel convert '{}' '{.}.jpg' ::: *.png
E una sintassi simile per alcune altre versioni (inclusa debian).
parallel convert '{}' '{.}.jpg' -- *.png
Il convert
Il comando trovato su molte distribuzioni Linux è installato come parte della suite ImageMagick. Ecco il codice bash per eseguire convert
su tutti i file PNG in una directory ed evitare il problema della doppia estensione:
for img in *.png; do
filename=${img%.*}
convert "$filename.png" "$filename.jpg"
done