Eliminar archivos de imagen innecesarios en Lume
Hola, soy Munou.
Originalmente migré desde WordPress y realizo la conversión a webp durante la compilación con un script de shell que creé yo mismo.
En ese caso, los archivos de imagen antes de la conversión se vuelven innecesarios, y si intento subirlos mientras edito un artículo en LumeCMS, intenta cargar todos los archivos de imagen y se vuelve lento.
Puede que esto mejore con futuras actualizaciones de LumeCMS, pero estos archivos de imagen innecesarios no son necesarios en primer lugar, así que me gustaría eliminarlos.
¿Cuánta diferencia de archivos hay?
Veamos la diferencia entre los archivos de imagen que existen en las etiquetas de los archivos HTML después de la compilación y las imágenes en el lado de la fuente.
Archivos de imagen realmente utilizados después de la compilación
$ cd Directorio de compilación de Lume (si hay archivos html, está bien)
$ grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\/uploads.*" | sort -u | wc -l
649
Para estar seguro, también hice un 'grep visual' con grep -vE para comprobar que no hubiera omisiones.
Así, los archivos de imagen realmente utilizados en este sitio fueron 649 archivos.
Dado que los archivos html después de la compilación se generan en una sola línea, los divido por comillas dobles para facilitar el grep, luego extraigo los archivos de imagen con expresiones regulares extendidas y finalmente los formateo.
Archivos de imagen existentes antes de la compilación
$ cd Carpeta de carga de imágenes antes de la compilación
$ ls | wc -l
1913
¡Sorprendentemente, hay 1264 archivos de imagen que en realidad no se utilizan!
※Si quieres hacerlo correctamente, hazlo con find.
Eliminando realmente
Así que, utilicé grep y xargs para mostrar esta diferencia.
$ cat rmpic.sh
#!/bin/bash
set -x
RM_PICDIR="/var/www/html/soulmining/src/uploads"
USE_SRCDIR="/var/www/html/soulmining/site"
cd $USE_SRCDIR || exit 2
USEPIC=$(grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\/uploads.*" | sort -u | awk -F/ '{print $3}')
cd $RM_PICDIR || exit 2
find -type f | awk -F/ '{print $2}' | grep -vFf <(echo "$USEPIC") | xargs -I {} -r echo "Junk file: {}"
echo "Done"
set +x
Siempre me da miedo usar el comando find, así que si no puedo moverme al directorio que quiero eliminar, devuelvo un valor de retorno de 2 y salgo.
Con esto, revisé los archivos no utilizados que se hicieron echo de nuevo, haciendo un 'grep visual' y luego una revisión rápida con grep -r "file" en el directorio real después de la compilación para confirmar que no se usaban, y luego edité y ejecuté de la siguiente manera.
Cambié a xargs -I {} -r rm {} y eliminé el modo de depuración.
#!/bin/bash
RM_PICDIR="/var/www/html/soulmining/src/uploads"
USE_SRCDIR="/var/www/html/soulmining/site"
cd $USE_SRCDIR || exit 2
USEPIC=$(grep -r "src" 2>/dev/null | sed "s/\"/\n/g"| grep -E "uploads.*(webp|png|jpg|jpeg|svg|gif)" | grep -oP "\/uploads.*" | awk -F/ '{print $3}')
cd $RM_PICDIR || exit 2
find -type f | awk -F/ '{print $2}' | grep -vFf <(echo "$USEPIC") | xargs -I {} -r rm {}
echo "Done"
De todos modos, gracias a que está gestionado con git, es fácil revertir desde git reset --hard valor_hash_commit y también está respaldado en un USB en mi servidor doméstico, así que lo ejecuto (¡nervioso!).
$ ./rmpic.sh
Done
¡Éxito!
Así que, también lo incluí para que se ejecute en el script de compilación.
Hasta la próxima.
Saludos.