El shell de linux: Comando rename – Renombrado masivo de archivos

Cuando se trabaja fundamentalmente en terminales de línea de comandos nos viene muy bien conocer herramientas como rename.

rename es un comando que nos permite renombrar archivos de forma masiva desde la shell de Linux, es decir, que no tenemos más que ejecutar un comando para renombrar una lista de archivos con un patrón común.

La sintaxis del comando rename es muy sencilla:

rename perlexpr [ archivos ]

Dónde:

* perlexpr es una expresión regular en lenguaje Perl.
* y [archivos] es la lista de archivos a los que afectará el comando.

Quizás lo más complicado sea hacer las expresiones regulares.

Veamos un ejemplo sencillo: Imaginemos que queremos cambiar la extensión de los archivos .txt del directorio actual por .csv . No tendremos más que ejecutar el comando rename de la siguiente manera:

[vampird@Sharwyn] :~$ rename ‘s/\.txt/\.csv/’ *.txt

* ‘s/\.txt/\.csv/’ es la expresión regular que dice "cambia .txt por .csv".
* * .txt es la lista de archivos a los que hay que aplicarles el cambio.

Otro ejemplo: Supongamos que queremos convertir a minúsculas todos los caracteres del conjunto de archivos contenidos en el directorio actual:

[vampird@Sharwyn] :~$ rename ‘y/A-Z/a-z/’ *

* ‘y/A-Z/a-z/’ es la expresión regular que dice "cambia los caracteres mayúsculas por minúsculas".
* * le dice al comando que lo haga en todos los archivos.

Otro ejemplo: Imaginemos que queremos eliminar la extensión de todos los archivos que tengan extensión .bak en el directorio actual:

[vampird@Sharwyn] :~$ rename ‘s/\.bak$//’ *.bak

* ‘s/\.bak$//’ le dice al comando que renombre los archivos terminados en .bak por el nombre del archivo sin .bak, es decir, que elimine el .bak.
* *.bak le dice al comando que actúe sólo en los archivos con extensión .bak del directorio actual.

En estos ejemplos hemos trabajado sólo en el directorio actual, pero se puede especificar un directorio cualquiera. Por ejemplo:

[vampird@Sharwyn] :~$ rename ‘s/gestor/profesor/’ /home/profesor/archivos/*

Una cuestión importante: Si estoy trabajando en un script bash y quiero utilizar una variable del script en la expresión regular de perl, tengo que exportarla para convertirla en una variable de entorno:

export USUARIO

Una vez exportada, ya puedo usarla en la expresión regular haciendo referencia a ella de la siguiente manera: $ENV{‘USUARIO’} Viéndolo en el ejemplo:

[vampird@Sharwyn] :~$ rename ‘s/gestor/$ENV{‘USUARIO’}/’ /home/profesor/$USUARIO/.nautilus/metafiles/*

=-=-=-=-=
Powered by Blogilo

Anuncios

4 comentarios to “El shell de linux: Comando rename – Renombrado masivo de archivos”

  1. Julia Says:

    Maravillosos tus conocimientos de la materia, aunque no es lo mío (por ahora jeje), no pierdo las esperanzas de aprender y espacios como el tuyo son muy interesantes para ayudar a lograrlo.

    Muchos éxitos con tu excelente blog y adelante!

    Saludos afectuosos!

  2. @ri Says:

    Reconosco q no conocia este comando y la verdad es q ahorra tiempo (es medio embole cambiar uno x uno ;P)
    Asi q no me qda otra que poner en practica algun conocimento de ER para poder usarlo

    salu2

  3. Roberto Plà Says:

    Siempre me maravillo de la potencia de las expresiones regulares, pero nunca encuentro un *manual/howto/documento* para aprender a usarlas empezando de cero.
    ¿Cual me recomientas?
    Gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


A %d blogueros les gusta esto: