Lo primero que hago cuando voy a empezar un nuevo montaje o maquetación web es preparar las imágenes. Las descargo de Figma, Adobe XD… o cualquiera que sea la fuente que me proporcionan.
Una vez descargadas las organizo en carpetas con el nombre de la página, post o producto al que pertenezcan.
Al principio las optimizaba una a una con GIMP. Escalar y exportar a webp con compresión del 85% . También aprovechaba en la exportacion para limpiar el nombre del archivo (quitar tildes, «eñes», caracteres especiales…
En proyectos con varias decenas de imágenes es una tarea que lleva más del tiempo del necesario.
Desde hace tiempo ya no uso GIMP para optimizar las imagenes, sino ImageMagick, un conjunto de comandos que permite convertir formatos, reescalar, comprimir (y más cosas) en lotes desde el terminal de Linux.
Lo primero que hago es situarme en el directorio y convertir a webp:
mogrify -format webp *.jpg
mogrify -format webp *.png
Elimino los archivos JPG o PNG:
rm *.jpg
rm *.png
Si algunas imágenes son demasiado grandes para web, las separo y las reescalo a un ancho máximo (en WordPress 2560px):
mogrify -resize 2560 *.webp
Por último aplico la compresión:
mogrify -quality 85 *.webp
Y nada más, en menos de un minuto he convertido, reescalado y comprimido todas las imágenes de un directorio.
Ahora solo faltaba limpiar el nombre, esto aún lo seguía haciendo a mano, hasta hoy…
Ya que uso Linux me pregunto, ¿y si creo un script en BASH que limpie los nombres de archivo de un directorio completo?
Aquí me ayudó DeepSeek, empezó generando un pequeño script en BASH para quitar las tildes de los nombres de archivo.
Pero seguí añadiendo cosas y al final tengo un script que limpia los nombres con todo lo que necesito:
- Elimina tildes.
- Cambia eñes por enes.
- Elimina cualquier caracter especial.
- Sustituye los espacios por guiones bajos.
Y este es el script completo:
limpiar-nombres() {
local DIRECTORIO="${1:-.}"
if [ ! -d "$DIRECTORIO" ]; then
echo "❌ Error: El directorio '$DIRECTORIO' no existe."
return 1
fi
echo "🔄 Limpiando nombres de archivos en: $DIRECTORIO"
echo "📝 Caracteres que se eliminarán/reemplazarán:"
echo " - Tildes (á, é, í, ó, ú, ñ)"
echo " - Caracteres especiales (@, #, $, %, &, *, !, ¿, ?, ¡)"
echo " - Espacios (reemplazados por _)"
echo " - Paréntesis, corchetes, llaves"
echo " - Comillas y apóstrofes"
local contador=0
# Usar find para manejar mejor archivos con espacios
find "$DIRECTORIO" -maxdepth 1 -type f -print0 | while IFS= read -r -d '' archivo; do
local nombre_original=$(basename "$archivo")
local directorio=$(dirname "$archivo")
local nuevo_nombre=$(echo "$nombre_original" | sed -e '
# Reemplazar tildes y ñ
y/áàäâÁÀÄÂ/aaaaAAAA/
y/éèëêÉÈËÊ/eeeeEEEE/
y/íìïîÍÌÏÎ/iiiiIIII/
y/óòöôÓÒÖÔ/ooooOOOO/
y/úùüûÚÙÜÛ/uuuuUUUU/
y/ñÑ/nN/
# Eliminar caracteres especiales
s/[@#%&*¿?¡!$]//g
# Eliminar paréntesis, corchetes, llaves
s/[()\[\]{}]//g
# Eliminar comillas y apóstrofes
s/['\''"`]//g
# Reemplazar espacios por guiones bajos
s/ /_/g
# Reemplazar múltiples guiones bajos por uno solo
s/__+/_/g
# Eliminar guiones bajos al inicio y final
s/^_//
s/_$//
')
if [ "$nombre_original" != "$nuevo_nombre" ]; then
echo "📁 Renombrando: \"$nombre_original\" -> \"$nuevo_nombre\""
mv -- "$archivo" "$directorio/$nuevo_nombre"
((contador++))
fi
done
echo "✅ Proceso completado. Se renombraron $contador archivos."
if [ $contador -eq 0 ]; then
echo "💡 No se encontraron archivos que necesiten renombrarse."
fi
}
# Alias para uso rápido
alias lnombres='limpiar-nombres'
alias limpiar-archivos='limpiar-nombres'
Añadiendo el script al archivo ~/.bashrc o ~/.zshrc (en mi caso uso ZSH) podremos usarlo en cualquier directorio sin necesidad de tener el script.sh dentro.
/home/user/Descargas/Fotos/limpiar-nombres
Ahora que se habla tanto de productividad, tanto Linux como la terminal, cada día mejoran la mía.
Deja una respuesta