jueves, 20 de agosto de 2026

Convertir JPG a Web recursivamente (versión mejorada)

jpg a webp

 

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