|

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.

Publicaciones Similares

  • |

    ssh: connect to host: Connection refused

    Escenario Esta mañana ha ocurrido algo inexplicable, por lo menos, como suele pasar en este dominio, hasta que hemos dado con la solución; luego parecía obvio. Nos avisan que una de las máquinas de nuestra red negaba el acceso por SSH provocando el siguiente error:

    Lo primero que pensamos es podía estar relacionado con…

  • Panasonic RR-US361

    Escenario Panasonic RR-US361 es una grabadora portátil de audio que, por la información que he podido recopilar, debe datar de principios de siglo. La utilizo de vez en cuando para grabar mis sueños. Me resulta más cómodo que el móvil por dos razones. Evito la luz de la pantalla, y no corro el riesgo de…

  • Disco corrupto en nas4Free

    Escenario Tengo un servidor para mis copias de seguridad que usa el gestor nas4Free, basado en FreeBSD 9.3. Problema Tras un corte inesperado del suministro eléctrico, la máquina no vuelve a arrancar. Se muestra este error por pantalla: /dev/ada4s2 contains a file system with errors, check forced /dev/ada4s2 directory inode 7561250, block #1 offset 2008…

  • Autenticación múltiple en Spring boot: JWT y formulario

    Escenario Por exigencias de un tercero debemos adaptar nuestro servicio web para que sea compatible con autenticación por JWT. Hasta ahora las llamadas al API se hacían desde dentro de la aplicación usando las mismas credenciales del usuario autenticado por cookie. La configuración de la cadena de filtros de Spring Security es la siguiente:

    …

  • La tabla mysql.plugin no existe

    Escenario Después de necesitar restaurar tres veces el servidor de MySql por culpa de varios crashs provocados por un fallo en el disco duro, encuentro en los logs entradas de este tipo: 2020-09-12T18:46:22.347957Z 5 [Warning] InnoDB: Cannot open table mysql/help_relation from the internal data2020-09-12T18:46:22.348985Z 5 [Warning] InnoDB: Cannot open table mysql/innodb_index_stats from the internal data dictionary of InnoDBdictionary Problema En varios foros leo que la solución pasa por hacer un:

    La cuestión es que, cuando lo intento, me encuentro…

Deja una respuesta

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