Utilice el comando 'buscar' para buscar archivos PNG, canalice la salida a imagemagick para la conversión por lotes

Utilice el comando 'buscar' para buscar archivos PNG, canalice la salida a imagemagick para la conversión por lotes

Tengo un directorio con miles de archivos de imágenes, en su mayoría JPG pero algunos PNG. Los archivos no tienen extensión, solo están numerados. Necesito convertirlos todos a JPG.

UsandoencontrarPuedo obtener una lista de todos los archivos con sus tipos, y a partir de ahí puedo usar Imagemagick para convertir de PNG a JPG especificando su tipo:

convert png:10020 jpg:10020.jpg

Pero me gustaría hacer esto por lotes en todos los archivos. ¿Cómo puedo canalizar la salida deencontrary convertir todos los archivos PNG a JPG?

Respuesta1

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 de los argumentos:

  1. .
    Buscar en el directorio actual

  2. -type f
    Simplemente busque archivos, no directorios/sockets/etc.

  3. while read IN; do
    Coloque cada nombre de archivo en la variable INy ejecute el bucle en él.

  4. if [ "x$(file -b --mime-type $IN)" = "ximage/png" ]; then
    Comprueba si el archivo es PNG...

  5. convert png:$IN jpg:$IN.jpg;
    ...y si es así, conviértelo.

  6. fi; done;
    ¡Hemos terminado!

Lo he probado esta vez y funciona, convirtiendo un directorio lleno de PNG sin la .pngextensión a JPG.

información relacionada