Gestión de imágenes corruptas

Escenario

Nos encontramos ante una biblioteca de decenas de miles de archivos fotográficos, de los cuales un porcentaje considerable está corrupto.

Objetivo

Depurar las imágenes corruptas a fin de organizar como es debido nuestra biblioteca.

Solución

Nota: sólo aplicable a sistemas linux
Vamos a necesitar la aplicación ImageMagick: $sudo apt-get install imagemagick y rsync, que debería venir instalado por defecto en tu distribución linux.

Primer paso:

Identificamos los archivos corruptos y los volcamos a un fichero. IFS=$'\n';for f in $(find /directorio/con/fotos -name '*.jpg' -or -name '*.JPG'); do identify $f > /dev/null || echo $f >> /tmp/fail ; done ; cat /tmp/fotos_corruptas Este comando recorre de manera recursiva todos los ficheros con extensión .jpg y, en caso encontrar uno corrupto, inserta una nueva línea en el fichero fotos_corruptas con la ruta del fichero corrupto. Por último, muestra por pantalla el contenido de dicho fichero. Este paso nos sirve para comprobar que, efectivamente, estamos detectando ficheros inválidos.

Segundo paso:

Movemos todos los ficheros corruptos a un directorio para su posterior borrado: IFS=$'\n';for f in $(find /home/yolanda/Imágenes -name '*.jpg' -or -name '*.JPG'); do identify $f > /dev/null || rsync -avR $f /tmp/imagenes_corruptos ; done ; ls /tmp/imagenes_corruptas De esta manera moveríamos todos los ficheros corruptos a la carpeta ficheros_corruptos. El inconveniente de esta comando es que, en caso de que dos ficheros tuvieran el mismo nombre, se sobrescribirían. De ahí que sea más pertinente usar rsync. Versión definitiva:: IFS=$'\n';for f in $(find /home/yolanda/Imágenes -name '*.jpg' -or -name '*.JPG'); do identify $f > /dev/null || rsync -avR $f /tmp/imagenes_corruptas ; done ; ls /tmp/imagenes_corruptas Este comando mueve todos los ficheros corruptos a /tmp/imagenes_corruptas, respetando el árbol de ficheros.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *