Jonathan Hernandez

Rails developer. Free (as in freedom) software enthusiast. Gamer.

Script en Bash Para Renombrar Ficheros

| Comments

Como gthumb estable en Gentoo (v. 2.2.1) no soporta las extensiones .JPG (la versión inestable 2.4.2 sí las soporta ya), he hecho un pequeño script en bash para que me traduciese todo mi álbum de fotos recursivamente de *.JPG a *.jpg, y de paso también que me quite los espacios en blanco en los nombres.

Es un script muy sencillo, puede servir para aprender un poco de bash y es fácilmente retocable para otros propósitos (se podría decir que ésta es la versión estable porque la he probado yo en un superdirectorio con todo mi album y me ha funcionado correctamente… las demás versiones son experimentales).

#!/bin/bash
# Programa en bash que renombra recursivamente todos los ficheros *.JPG
# a *.jpg y quita todos los espacios en blanco.
func_renombrar()
{
for Fichero in *
do
(
if [ -d "$Fichero" ]; then
cd "$Fichero"
pwd
func_renombrar
fi
)
Extension=`echo $Fichero | gawk -F. '{print $2}'`
if [ "$Extension" = "JPG" ]; then
SinEspacios=`echo $Fichero | sed -s 's/\ //g'`;
NuevoNombre=`echo $Fichero | gawk -F. '{print $1".jpg"}'`
echo "$Fichero -> $NuevoNombre"
mv "$Fichero" "$NuevoNombre"
fi
done
}

func_renombrar


Actualización: Sergi me ha enviado el script retocado con algunas mejoras (no lo he probado todavía, pero se agradece el feedback), y es interesante:

-si hay “.” en medio del fichero, a parte del que precede a la
extensión, lo trate bien
-sea generico (pasandole la vieja y nueva extension por parametros)
-y alguna cosa más pero que ya son manías mías de programar y que no
tienen nada que ver con el caso :P


Actualización1.1 Edgar me ha avisado de un bug en el script del sergi, te dejaba todas las fotos sin extensión. Simplemente se tenía que cambiar la línea 25 que ponía:
mv “$Fichero” “$NuevoNombre”
por esta:
mv “$Fichero” “$NuevoNombre.$nuevaextension”

Ya esta arreglado para quien se lo descargue ahora.
Descargar/ver renamefiles


Actualización2: Sergio me apunta a otra posible solución.

Algunos links de información:

Bash: Ejemplos
Bash by example, part2