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

2

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

Usando o find , posso 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 como um lote em todos os arquivos. Como posso canalizar a saída de find e converter todos os arquivos PNG para JPG?

    
por Hibiscus 12.07.2014 / 03:30

1 resposta

3
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 / sockets / etc.

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

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

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

  6. fi; done;
    Nós terminamos!

Eu testei desta vez, e funciona, convertendo um diretório cheio de PNG sem a extensão .png para JPGs.

    
por 12.07.2014 / 03:40