martes, 31 de agosto de 2010

Renombrar archivos masiva y rápidamente a través de la consola

Más de alguna vez necesitamos renombrar varios archivos (10, 20, 100, etc) no vamos a estar cambiándoles el nombre uno por uno, y obviamente nos gustaría que todos quedaran con el mismo nombre y una secuencia numérica. Pero, y si se queremos cambiar una parte de los nombres de los archivos por otro, o agregar una cadena de texto al principio de todos los archivos, o reemplazar todos los espacios por "_"... De seguro has tenido alguna vez en la vida este problema.

Particularmente, ahora que he aprendido algo del uso de la terminal o consola de Ubuntu, creo que es muchísima más rápida y automatizadora de tareas que los programas con entorno gráfico (siempre hay excepciones obviamente). Pero claro si, hay que saber usarla. Los programas que hoy vamos a enseñar a usar son sencillos, así que se asusten por abrir la terminal.

Para solucionar los problemas de renombramiento de archivos utilizaremos el comando rename y mvb. Pero antes veremos como renombrar un archivo por terminal usando el comando mv.

Este comando se utiliza también para mover los archivos de un lugar a otro, pero también para cambiarles el nombre, o cambiar el nombre y moverlos de lugar. Veamos como se hace (ext=extensión):

Comando mv
Este comando lo utilizaremos cuando queramos hacer acciones sobre un solo archivo, como renombrarlo o moverlo de lugar. También nos sirve para mover de lugar un lote de archivos.
Renombrar un solo archivo
mv nombre_antiguo.ext nombre_nuevo.ext
Renombrar un solo archivo y cambiarlo de directorio
mv nombre_antiguo.ext /directorio nuevo/nombre_nuevo.ext
Mover un solo archivo de lugar (nos sirve de complemento al renombramiento)
mv nombre_antiguo.ext /directorio nuevo/
Mover todos los archivos de una extensión (ext) específica a otro lugar
mv *.ext /directorio nuevo/
Obtener más ayuda de este comando
man mv

Comando rename
Su utilidad radica en la posibilidad de reemplazar, borrar o agregar una cadena de texto específica a uno o varios archivos.

Sintaxis del comando
rename s/antiguo/nuevo/ criterio
rename y/antiguo/nuevo/ cirterio 

# s es para sustituir lo primero que pilla
# y es para sustituir todo lo que pilla
# comodines y otro argumentos a considerar en rename:
# * = una cadena completa, p.e: *.mp3 (todos los archivos mp3)
# ^ = indica el inicio del nombre del archivo
# . = comodín de una posición, p.e: ^.. (indica los dos primeros caracteres del nombre del archivo)
# \ = sirva para indicar un punto o espacio, p.e: \. = . ; \ = espacio

Cambiar una cadena de texto por otra de todos los archivos de una extensión en específica
rename s/antiguo/nuevo/ *.ext
Cambiar una cadena de texto por otra en todas las posiciones del nombre del archivo
rename y/antiguo/nuevo/ *.ext # por ejemplo: reemplazar todos los espacios por "_"
rename y/\ /_/ *.ext # la inversa de la anterior
rename y/_/\ / *.ext
Agregar una cadena de texto al final del nombre de los archivos
rename s/.ext/texto.ext/ *.ext
Agregar una cadena de texto al principio del nombre del archivo
rename s/^/texto/ *.ext
Reemplazar los dos primeros caracteres del nombre de los archivos
rename s/^../texto/ *.ext
Cambiar minúsculas por mayúsculas
rename y/a-z/A-Z/ *.ext
Cambiar mayúsculas por minúsculas
rename y/A-Z/a-z/ *.ext
Obtener más ayuda de este comando
man rename
man perl
# perl, por que los argumentos que usa rename están en leguaje perl (yo no lo he visto).

Comando mvb
Mi más reciente adquisición. La más rápida, cómoda y simple. Permite renombrar lotes archivos asignándoles una numeración automática. También tiene varias otras opciones es tan simple como hacer lo siguiente:

Primero hay que instalarlo
wget http://www.ticklestix.co.uk/crux/mvb/mvb_2.4.tgz
sudo tar zxvf mvb_2.4.tgz -C /usr/
sudo chown -R root:root /usr/mvb_2.4/
sudo ln -s /usr/mvb_2.4/mvb /usr/bin/mvb

Renombrar varios archivos con numeración automática (mantiene la extensión original)
mvb nombre_nuevo
Obtener más ayuda de este comando
mvb -h

Scripts
Aunque he comprobado que ejecutar las tareas por consola es mucho más rápido que los programas de entornos gráficos, no viene mal algunas veces un Script, ya que es como un intermedio entre la consola y el entorno gráfico, por lo menos así yo lo uso y veo. Otra razón por la que estoy a favor de ellos es porque son más livianos y rápidos que los programas de entorno gráfico. Por lo tanto les dejaré dos scripts:

Nautilus Script Renamer
Es un script que se lanza desde nautilus, es decir se ejecuta sobre los archivos seleccionados al darle click con el botón derecho > Scripts > Renamer. Luego se seleccionan las opciones. Para instalarlos ejecuta el siguiente código en la terminal:
wget http://dl.dropbox.com/u/9580135/nautilus-renamer.sh
sh nautilus-renamer.sh

Lo que más me gusta de éste script es que permite seleccionar los archivos que se quieren renombrar, pero personalmente son pocas las veces que necesito renombrar ciertos archivos. Por lo general necesito renombrar toda la carpeta, o todos los archivos de una extensión específica, es por ello que he escrito mi propio script renombrador, que me funciona a la perfección y me permite ejecutar mis tareas rápidamente.

Mi Script Renombrador
Últimamente me ha dado por aprender a hacer scripts, y he logrado hacer uno para mis necesidades de renombramiento. A parte de mi satisfacción personal por haberlo logrado, creo que me funciona más rápidamente que el script anterior. Es bastante sencillo. Sin embargo cuando tengo que renombrar repetitivamente prefiero utilizar el código en la terminal, porque presiono la tecla hacia arriba y copio todas mis configuraciones. Este código lo utilizo cuando quiero renombrar una sola vez y también lo recomiendo a los que quieran un intermediario entre la interfaz gráfica y la consola, como ya he explicado.
Pueden descargar mis dos scripts en Script de Renombramiento Completo y Script de Renombramiento Rápido
Recomiendo guardarlo dónde quieras, pero luego para hacer correr tendrás que referirte a esa ruta, por ejemplo: si lo guardaras en /home/usuario, para utilizarlo tendrías que abrir una terminal en la carpeta dónde están los archivos objetivos y escribir el siguiente comando:
sh /home/usuario/ScriptRenombrador
Por eso, es preferible crear un alias para lanzar este script. Eso se realiza según lo explicado en este POST. Luego lo lanzas con el alias, ¿fácil, no?

Aplicaciones Gráficas
Si aún así quieres usar una aplicación gráfica, prueba colocando en el Centro de Software de Ubuntu: KRenamer, pyRenamer,GPRename, etc. Si escribes "rename" te aparecerá la lista.


Espero que les haya sido de utilidad este extenso post, pero vertí todo lo que he aprendido acerca del renombramiento masivo de archivos.

Saludos a todos y ¡que estén muy bien!

3 comentarios:

  1. Excelente aporte, gracias. Ojalá fuera más fácil hallar artículos buenos como este con Google.

    Solo un apunte:
    Necesitaras usar un '\' antes de cada espacio cuando empleas el comando:
    mv nombre_antiguo.ext /directorio nuevo/nombre_nuevo.ext
    lo correcto es:
    mv nombre_antiguo.ext /directorio\ nuevo/nombre_nuevo.ext


    Ah, usted hizo una gran contribución en el paquete 'gantt' de LaTex. Enhorabuena :)

    ResponderBorrar