Como Renombrar Masivamente Archivos: Ejemplos de uso de RENAME
Renombrar un archivo es sencillo... pero cuando se trata de renombrar cientos.... la cosa varia. El uso del comando rename y de expresiones regulares nos sirven para simplificar dicha tarea.
"Una simple linea de comando puede conseguir en varios segundos el mismo resultado que haríamos manualmente en horas."
La sintaxis del comando rename es:
rename perlexpr [archivos]
Dónde:
- perlexpr es una expresión regular en lenguaje Perl. (ver *)
- [archivos] es la lista de archivos a los que afectará el comando.
Existen entornos gráficos de este comando (pyrenamer) pero muchas veces no tenemos acceso a entorno gráfico, y la terminal siempre la podemos usar, por ejemplo en entornos online de linux (ejemplo en c9.io) o cuando estamos trabajando directamente con servidores.
Os dejo varios ejemplos explicados:
1) Queremos cambiar la extensión de los archivos .txt del directorio actual por .csv
$rename 's/\.txt/\.csv/' *.txt
Explicación:
$rename 's/^/01.03.Planos./' *.pdf
Explicación:
3) Queremos sustituir los espacios de los nombres por el caracter guión bajo, osea " " cambiar a "_" de los archivos .PDF
$rename 'y/\ /_/' *.pdf
pyrenamer: entorno gráfico para el comando rename |
Os dejo varios ejemplos explicados:
1) Queremos cambiar la extensión de los archivos .txt del directorio actual por .csv
$rename 's/\.txt/\.csv/' *.txt
Explicación:
- '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.
Nota: el caracter especial ".", se indica con "\."
2) Queremos añadir al principio del nombre de todos los ficheros .PDF el texto "01.03.Planos.":
Explicación:
- 's/^/01.03.Planos./' es la expresión regular que dice "al principio pon el texto 01.03.Planos."
- *.pdf es la lista de archivos a los que hay que aplicarles el cambio.
$rename 'y/\ /_/' *.pdf
Explicación:
- 'y/\ /_/' es la expresión regular que dice "cuando aparezca un espacio sustitúyelo por un guion bajo _"
- *.pdf es la lista de archivos a los que hay que aplicarles el cambio.
$rename 's/\(.*\)//g' *
Explicación:
Explicación:
- 's/\(.*\)//g' es la expresión regular que dice "elimina el contenido entre parentesis incluido los parantesis"
- * a todos los ficheros
5) Tenemos varios archivos con este formato de nombre: "Audio XX-Pista de audio By hola.mp3", siendo XX el numero de la canción. Se desea eliminar del nombre la parte de "Audio " y " By hola"
$rename 's/Audio //g' *.mp3
$rename 's/ By hola//g' *.mp3
Explicación:
- Aplicamos 2 veces el comando, una para eliminar la palabra "Audio " y otra para eliminar " By hola"
- 's/Audio //g' eliminamos la palabra "Audio "
- 's/ By hola//g' eliminamos las palabras " By hola"
- *.mp3: Aplicamos a todos los ficheros .mp3
Fuentes:
https://enavas.blogspot.com.es/2009/11/el-shell-de-linux-comando-rename.html
https://www.linuxadictos.com/truco-gnulinux-del-dia-renombrar-ficheros-masivamente.html
http://linux-productivo.blogspot.com.es/2010/08/renombrar-archivos-masiva-y-rapidamente.html
https://www.enmimaquinafunciona.com/pregunta/113505/quitar-parentesis-y-corchetes-de-varios-directorios
https://www.carlosegea.es/2010/01/21/renombrar-archivos-masivamente-en-linux-en-entorno-grafico/
Expresiones Regulares (*):
http://mercurio.ugr.es/pedro/tutoriales/cursos/perl/expresiones.htm
Veamos algunos ejemplos ilustrativos:
(*) Extra:
Construyendo expresiones regulares complejas:
. | cualquier caracter salvo el de retorno de carro |
---|---|
^ | indica que coincida al principio de la línea |
$ | indica que coincida al final de la línea |
* | aparezca 0 o más veces el caracter que lo precede |
+ | aparezca 1 o más veces el caracter que lo precede |
? | aparezca 0 o 1 veces el caracter que lo precede |
[] | indica un conjunto de caracteres que pueden aparecer |
[^] | indica un conjunto de caracteres que no pueden aparecer |
| | indica una disyunción, aparezca una de las opciones |
() | agrupa una serie de patrones en un simple elemento |
{n} | que coincida exactamente n veces |
{n,} | que coincida al menos n veces |
{n,m} | que coincida al menos n veces y no mas de m |
\n | un retorno de línea |
\t | un tabulador |
\w | un caracter alfanumérico (equivale a [a-zA-Z0-9_]) |
\W | un caracter no alfanumérico (equivale a [^a-zA-Z0-9_]) |
\d | un caracter numérico (equivale a [0-9]) |
\D | un caracter no numérico (equivale a [^0-9]) |
\s | un caracter de espaciado (espacio, tabulador, nueva línea, etc) |
\S | un caracter NO de espaciado |
\b | coincida con los límites de una palabra |
\B | coincida con el interior de una palabra |
\033 | un número octal (el 033) |
\x1b | un número hexadecimal (el 1B) |
\| \[ \] \( \) \* \^ \/ \\ etc | representan | [ ] ( ) * / \ (hay que escapar estos caracteres especiales) |
Veamos algunos ejemplos ilustrativos:
d.l | una "d" seguida de un caracter cualquiera y una "l" (del, dal, dzl, d5l, etc) |
---|---|
^f | una "f" al principio de la cadena (fofo, farfolla, f35, etc) |
^hol | "hola" al principio de la cadena (hola, holita, etc) |
e$ | una "e" al final de la cadena (este, ese, etc) |
te$ | "te" al final de la cadena (este, paquete, etc) |
ind* | "in" seguido de cero o más caracteres "d" (in, ind, indd, etc) |
.* | cualquier cadena, sin retorno de carro |
^$ | una cadena vacia |
[qjk] | una "q", o una "j" o una "k" |
[^qjk] | no sea "q", o una "j" o una "k" |
[a-z] | cualquier letra entre la "a" y la "z" |
[^a-z] | no sean letras minúsculas |
[a-zA-Z] | una letra minúscula o mayúscula |
[a-z]+ | una secuencia no vacia de letras minúsculas |
f.*ca | coincide con p.e. "fca", "foca", "flaca", "flor vaca", etc |
f.+ca | coincide con los anteriores salvo con "fca" |
fe?a | coincide con "fa" y "fea" |
^[ \t]*$ | una linea en blanco, o combinaciones de espacios y tabuladores |
[-+]?\d*\.?\d* | lo mismo que [-+]?[0-9]*\.?[0-9]* (números decimales) |
( (\d{1,2})\/(\d{1,2})\/(\d{1,4}) ) | una fecha en el siguiente formato DD/MM/AAAA (13/02/1674 ó 8/2/23 pero también 99/99/9999) |
pepe|juan | o "pepe" o "juan" |
(pe|hue)cos | o "pecos" o "huecos" |
(da)+ | o da o dada o dadada ... |
[01] | un "0" o un "1" |
\/0 | una división por 0 |
\/ 0 | una división por 0 con un espacio |
\/\s0 | una división por 0 con un caracter de espacio (espacio, tabulador, retorno de carro) |
\/ *0 | una división por 0 con varios espacios |
\/\s*0 | una división por 0 con posibles caracteres de espaciado |
\/\s*0\.0* | una división por 0 con posibles caracteres espaciado y acepta "0." "0.0" "0.00" etc |
fia|fea|fua | coincida con "fia", "fea" o "fua" |
f(i|e|u)a | coincida con "fia", "fea" o "fua" |
(fia|fea|fua) | equivale a los dos anteriores |
[fia|fea|fua] | equivale a [fiaeu] |