Use o comando 'find' para procurar arquivos PNG, canalize a saída para o imagemagick para conversão em lote

Use o comando 'find' para procurar arquivos PNG, canalize a saída para o imagemagick para conversão em lote

Eu tenho um diretório com milhares de arquivos de imagem, principalmente JPG, mas alguns PNG. Os arquivos não têm extensão, são apenas numerados. Preciso converter todos eles para JPG.

UsandoencontrarPosso obter uma lista de todos os arquivos com seus tipos e, a partir disso, posso usar o Imagemagick para converter de PNG para JPG, especificando seu tipo:

convert png:10020 jpg:10020.jpg

Mas eu gostaria de fazer isso em lote em todos os arquivos. Como posso canalizar a saída deencontrare converter todos os arquivos PNG para JPG?

Responder1

find . -type f | while read IN; do
  if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    convert png:$IN jpg:$IN.jpg;
  fi;
done;

Significado dos argumentos:

  1. .
    Encontre no diretório atual

  2. -type f
    Basta encontrar arquivos, não diretórios/soquetes/etc.

  3. while read IN; do
    Coloque cada nome de arquivo na variável INe execute o loop nele.

  4. if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    Verifique se o arquivo é PNG...

  5. convert png:$IN jpg:$IN.jpg;
    ...e se for, converta-o.

  6. fi; done;
    Acabamos!

Desta vez testei e funciona, convertendo um diretório cheio de PNG's sem .pngextensão para JPG's.

informação relacionada