tl; dr
Para quem quer apenas os comandos mais simples:
Converter e manter arquivos originais:
mogrify -format jpg *.png
Converter e remover arquivos originais:
mogrify -format jpg *.png && rm *.png
Conversão em lote explicada
Meio atrasado para a festa, mas só para esclarecer toda a confusão para alguém que pode não estar muito confortável com cli, aqui está uma referência e explicação super idiotas.
Diretório de exemplo
bar.png
foo.png
foobar.jpg
Conversão Simples
Mantém todos os arquivos PNG originais, além de criar arquivos jpg.
mogrify -format jpg *.png
Resultado
bar.png
bar.jpg
foo.png
foo.jpg
foobar.jpg
Explicação
-
mogrify é parte do ImageMagick conjunto de ferramentas para processamento de imagens.
O - mogrify processa imagens no lugar , o que significa que o arquivo original é sobrescrito, com exceção da opção
-format
. (De o site : This tool is similar to convert except that the original image file is overwritten (unless you change the file suffix with the -format option)
)
- A opção
- format
especifica que você alterará o formato e o próximo argumento precisa ser o tipo (neste caso, jpg).
- Por fim,
*.png
são os arquivos de entrada (todos os arquivos terminados em .png).
Converter e remover
Converte todos os arquivos png para jpg, remove original.
mogrify -format jpg *.png && rm *.png
Resultado
bar.jpg
foo.jpg
foobar.jpg
Explicação
- A primeira parte é exatamente igual à anterior, ela criará novos arquivos jpg.
- O
&&
é um operador booleano. Em resumo:
- Quando um programa termina, ele retorna um status de saída. Um status de
0
significa que não há erros.
- Como
&&
realiza avaliação de curto-circuito , a parte direita só será executada se houver Não houve erros . Isso é útil porque você pode não querer excluir todos os arquivos originais se houver um erro ao convertê-los.
- O comando
rm
exclui arquivos.
Coisas de fantasia
Agora, aqui estão algumas surpresas para as pessoas que são confortáveis com o cli.
Se você quiser alguma saída enquanto estiver convertendo arquivos:
for i in *.png; do mogrify -format jpg "$i" && rm "$i"; echo "$i converted to ${i%.*}.jpg"; done
Converta todos os arquivos png em todos os subdiretórios e forneça a saída para cada um deles:
find . -iname '*.png' | while read i; do mogrify -format jpg "$i" && rm "$i"; echo "Converted $i to ${i%.*}.jpg"; done
Converta todos os arquivos png em todos os subdiretórios, coloque todos os jpgs resultantes no diretório all
, numere-os, remova os arquivos png originais e exiba a saída para cada arquivo conforme ele ocorre:
n=0; find . -iname '*.png' | while read i; do mogrify -format jpg "$i" && rm "$i"; fn="all/$((n++)).jpg"; mv "${i%.*}.jpg" "$fn"; echo "Moved $i to $fn"; done