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';forfin$(find/directorio/con/fotos-name'*.jpg'-or-name'*.JPG');doidentify$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';forfin$(find/home/yolanda/Imágenes-name'*.jpg'-or-name'*.JPG');doidentify$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';forfin$(find/home/yolanda/Imágenes-name'*.jpg'-or-name'*.JPG');doidentify$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.
Escenario Desde hace años tengo una aplicación web apoyada en Laravel, que mantengo con frecuencia. En el servidor corren dos instancias del framework, una para la aplicación principal con Laravel 6, y otra para un API que desplegué hace poco con Laravel 7. Problema Llevo unos días notando que las páginas tardan más en cargarse,…
Escenario Hemos migrado nuestro repositorio de git a un nuevo servidor y tenemos que actualizar las URLs de los orígenes de nuestros repositorios locales. Problema Cambiamos la url remota del repositorio local de git con el comando
git remote set-url y, tras hacer un pull git nos devuelve el siguiente error:
fatal:unable toaccess'https://git.technoage.es/acme.git/':server certificate verification failed.CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:none Solución Por lo visto nuestra…
Escenario Estoy diseñando un formulario web en el que quiero mostrar un combo que se carga dinámicamente con una petición XHR. Problema Los datos a cargar cuentan con miles de registros. Necesito un combo que se cargue de manera dinámica y disponga de un autocomplete para filtrar los resultos. Solución React select es un módulo…
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…
Escenario Un cliente quiere enviarnos ficheros usando el protocolo SFTP. Nos pide que la autenticación se haga por medio de intercambio de claves. Nuestro servidor corre en un Ubuntu 18.04 Problema En realidad no lo es. Lo hubiera sido en caso de que el cliente hubiera preferido una autenticación de tipo usuario/contraseña. ¿Cómo le hacemos…
Escenario Llevo tiempo lamentándome cada vez que, con Firefox, tengo que abrir el explorador de ficheros. Por ejemplo para elegir una fichero para subir a un sitio o elegir la carpeta donde quiero dejar un fichero que voy a descargar. Problema Firefox, en vez de usar el explorador de ficheros del sistema —en mi caso…