rename

GNU/Linux es un aprender sin parar. Eso de nunca te acostarás sin saber algo nuevo, en este caso alcanza su máximo apogeo. Cuando me empecé a relacionar con Linux, no tocaba el terminal así me mataran. Sin embargo, poco a poco, vas viendo las posibilidades que te ofrece, hasta que llega el día que pasas mas tiempo en el terminal que fuera. Creo, que es sobre todo, en el momento, en que empiezas a trabajar con otros sistemas, como puede ser un VPS, una Raspberry, etc. En este aprendizaje continuo vas conociendo gran cantidad de herramientas, que te van haciendo la vida, mas y mas fácil. Y es así como he llegado a toparme con rename.

Te tengo que confesar, que durante un tiempo, no le encontraba la gracia al uso de las expresiones regulares, mas que nada por ignorancia. Sin embargo, hoy en día, casi voy buscando , el lugar y el momento para aplicarlas. Y es que precisamente rename, me ofrece la posibilidad de hacer el renombrado masivo de una forma muy sencilla. Eso, tienes que tener conocimientos sobre expresiones regulares, pero una vez los tienes, esto de renombrar no tiene fin.

Rename

Como decía en la introducción, llevo toda la vida utilizando mv para el renombrado de archivos en el terminal. Y a estas alturas descubro rename, así que no he podido resistirlo, y he querido compartirlo contigo de inmediato.

El principal problema de mv es que cuando quieres que hacer un renombrado masivo, la cosa se complica un poco. No es que sea nada del otro mundo, pero puede echarte para atrás. Por ponerte un ejemplo, (y que conste que solo es un ejemplo) si queremos renombrar algunos archivos .jpg a .png, tendríamos

  • Utilizando mv,
for i in *.png;do mv $i ${i/.jpeg/.jpg};done
  • Utilizando rename
rename 's/.jpeg/.jpg/g' *.jpeg

Hombre no es que sea mucha diferencia, pero la verdad, es que tienes muchas mas posibilidades de cometer un error utilizando la primera de las soluciones que con rename.

Lo básico de rename

Lo cierto es que rename no tiene cientos de opciones, es bastante sencillo de usar,

rename [ -v ] [ -n ] [ -f ] re [ archivos ]

Donde,

  • -v saca por pantalla los nombres de los archivos correctamente renombrados
  • -n no realiza ninguna acción simplemente muestra los archivos renombrados. Esto es una buena opción para probar cual será el resultado del renombrado, sin que luego nos tiremos las manos a la cabeza.
  • -f sobre escribe los archivos existente
  • re es una expresión regular

Expresiones regulares

Como decía en la introducción, hoy en día soy un verdadero obsesivo de las expresiones regulares. Y es que realmente te dan un potencial tremendo. Eso, si necesitan de una pequeña curva de aprendizaje para poder sacar todo el potencial que nos ofrecen.

Para sustituir una palabra por otro la expresión regular tiene que ser como lo que indico a continuación,

s/expresion1/expresion2/[gi]

Los parámetros g e i son dos modificadores que nos permiten lo siguiente,

  • g sustituir todas las apariciones de expresion1 en expresion2. Si no lo hacemos así, solo se reemplazará la primera de las apariciones.
  • i no hace distinción entre mayúsculas y minúsculas.

Por otro lado, si en lugar de preceder la expresión regular por una s lo haces con una y lo que realizas es un reemplazo carácter a carácter. Por ejemplo,

y/abc/def/

Sustituirá a por d, b por e y así sucesivamente.

También se puede hacer para reemplazar rangos,

y/a-z/A-Z/

Pasará todas las minúsculas a mayúsculas.

Meta caracteres

Algunos de los meta caracteres mas habituales son los siguientes,

  • ^ comienzo de la cadena
  • $ final de la cadena
  • . cualquier carácter
  • * cualquier número de apariciones del carácter precedente, incluido si no aparece.
  • + lo mismo que el anterior, pero debe aparecer al menos una vez
  • ? igual que los anteriores pero solo una vez.
  • | permite elegir entre dos opciones
  • (...) para agrupar
  • [...] un conjunto de caracteres
  • \ para escapar un meta carácter
  • \t tabulador
  • \n nueva línea
  • r retorno de carro
  • \s un espacio
  • \S cualquier carácter menos un espacio
  • \d un dígito

Algunos ejemplos

  • rename -v -n 's/screen/pantalla/' *.png
screenshot-20180726172904-1155x922.png renamed as pantallashot-20180726172904-1155x922.png
  • rename -v -n 's/2018-12-1[5|6]/hoy/' *.png
rename(captura de screen de 2018-12-15 17-23-55.png, captura de screen de hoy 17-23-55.png)
rename(captura de screen de 2018-12-15 17-33-10.png, captura de screen de hoy 17-33-10.png)
rename(captura de screen de 2018-12-16 08-49-17.png, captura de screen de hoy 08-49-17.png)
  • rename -v -n 's/^captura\s/captura-/' *.png
rename(captura de screen de 2018-06-03 11-43-38.png, captura-de screen de 2018-06-03 11-43-38.png)
rename(captura de screen de 2018-06-04 08-38-15.png, captura-de screen de 2018-06-04 08-38-15.png)

Conclusión

Como ves las posibilidades que te ofrece rename son mas que espectaculares. Lo cierto es que podrías conseguirlo con la combinación de otras herramientas, pero es que … resulta tan sencillo hacerlo con rename.

La ventaja de rename es que de un solo golpe lo tienes todo. Por contra el inconveniente es que necesitas conocer algo de expresiones regulares. Pero

 

Más información:

Fuente: atareao

¿Quién está en línea?

Hay 23422 invitados y ningún miembro en línea