domingo, abril 22, 2007

Renombrar archivos con rename (Linux)

Muchas veces cuando estamos desarrollando nuevos sitios, es común tener que renombrar muchos archivos, generalmente fotos.

Para usar las fotos de un producto de manera sencilla, ponemos la clave del producto como el nombre de este y la extensión jpg pero cuando además de la foto también tenemos el thumbnail usamos la clave con el sufijo _th

Si en un folder tengo cientos de archivos gráficos que serán thumbnails pero que aún no llevan el sufijo, tendré que renombrarlos a todos, con rename es muy fácil.

La sintaxis de rename:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]


La parte que quizás más asuste es la del perlexpr. A estas alturas las expresiones regulares con Perl deberían de ser cosa de todos los días, pero aún existen administradores que no se llevan bien con ellas.

-v es para ver los resultados
-n es para ver los resultados sin que haga cambios
-f es para forzar la sobreescritura de los archivos resultantes

Para esta necesidad yo tengo la siguiente lista de archivos:
AA02.jpg
AJ11.jpg
AJ14.jpg
BO12.jpg
...

y los quiero renombrar a:
AA02_th.jpg
AJ11_th.jpg
AJ14_th.jpg
BO12_th.jpg
...

La expresión regular es la siguiente s/\.jpg$/_th\.jpg/ quedando el comando como sigue:
$> rename -v 's/\.jpg$/_th\.jpg/' *.jpg
AA02.jpg renamed as AA02_th.jpg
AJ11.jpg renamed as AJ11_th.jpg
AJ14.jpg renamed as AJ14_th.jpg
BO12.jpg renamed as BO12_th.jpg
...


Mas información:
How to Bulk Rename Files in Linux (Terminal or GUI)

2 comentarios:

Unknown dijo...

Hola, muy buen post, ahce ratoq ue estaba tratando de evr como hacer los cambios de nombres.

Eso si te quería preguntar algo, el ejemplo que pusiste solo agrega una terminacion al nombre del archivo, para cmabirlo completamente que tendría que cambiar en el comando??

Ojala me puedqas responder.
Saludos!

juparave dijo...

Lo que estoy haciendo con el comando es cambiar la extensión '.jpg' a '_th.jpg'. Es difícil cambiar completamente el nombre pues tienes varios archivos y no puedes repetir el nombre.

Para cambiar el patrón de búsqueda y remplazo, sólo modifica lo que está dentro de la expresión.

's/\.jpg$/_th\.jpg/'

en general es así

's/viejo/nuevo/'

Saludos

PD. 'viejo' debe de existir para que lo pueda encontrar y remplazar.