Ya vimos en un artículo anterior cómo convertir imágenes JPG a Web recursivamente en varias carpetas. Pues vamos a mejorarlo:
Veamos cómo cambiar el formato de las imágenes recursivamente, pero a la hora de grabar la nueva imagen, eliminamos los caracteres que nos pueden dar problemas: vocales acentuadas, espacios, puntos...
find . -type f \( -iname "*.jpg" -o -iname "*.png" -o -iname "*.jpeg" \) -exec sh -c '
for img; do
dir=$(dirname "$img")
base=$(basename "$img")
base="${base%.*}"
clean_base=$(echo "$base" | sed -e "y/áéíóúÁÉÍÓÚ/aeiouAEIOU/" -e "s/ /-/g" -e "s/\.//g")
magick "$img" -resize "900x750>" "$dir/$clean_base.webp"
done
' sh {} +
Después de hacer todo esto procedemos a eliminar las imágenes JPG para que no nos moleste
find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) -delete
Y como los usuarios seguro que habrán puesto nombres poco descriptivos aunque se lo hayas repetido mil veces, con la siguiente orden haremos que las imagenes que hay dentro de una carpeta sean renombradas al nombre de las carpetas donde estan con un guión y un número que empiece por 01:
Ejemplo, imágenes de la carpeta 3B_2aCanet2021 quedarían así:
3B_2aCanet2021-01.webp
3B_2aCanet2021-02.webp
3B_2aCanet2021-03.webp
find . -type d -exec bash -c '
for dir; do
# Habilitamos buscar múltiples extensiones y evitar errores si una carpeta está vacía
shopt -s nullglob nocaseglob
# Buscamos imágenes dentro de la carpeta actual
imagenes=("$dir"/*.{webp,jpg,jpeg,png})
# Si hay imágenes en esta carpeta, procedemos
if [ ${#imagenes[@]} -gt 0 ]; then
contador=1
# Obtenemos el nombre exacto de la carpeta actual
nombre_carpeta=$(basename "$dir")
for img in "${imagenes[@]}"; do
# Extraemos la extensión del archivo (ej: webp)
ext="${img##*.}"
# Generamos el nuevo nombre con formato: Carpeta-01.ext
nuevo_nombre=$(printf "%s-%02d.%s" "$nombre_carpeta" "$contador" "$ext")
# Renombramos (la opción -n evita sobreescribir un archivo si ya existe con ese nombre)
if [ "$img" != "$dir/$nuevo_nombre" ]; then
mv -n "$img" "$dir/$nuevo_nombre"
fi
# Sumamos 1 al contador
((contador++))
done
fi
done
' bash {} +
Espero que os haya sido de utilidad
No hay comentarios:
Publicar un comentario