Cómo sustituir nombres de archivos por lote en linux

Como renombrar varios archivos desde consola en linux

Hace poco me he encontrado en la necesidad de renombrar cientos de archivos desde la raspberry que tengo haciendo de NAS. El problema era que en algunos casos necesitaba saber cómo cambiar partes del nombre de varios archivos a la vez desde consola.

Vamos a centrarnos en un comando que nos permitirá realizar estas acciones. Lo bueno, es que si tienes conectados los discos a la máquina con linux, no necesitarás un programa de terceros que te ayude a modificar los nombres de los archivos.

Una vez lo tengas dominado te resultará muy sencillo renombrar grupos de archivos con una simple línea en la consola. Además si lo haces con permisos de superusuario te dará igual las limitaciones que haya en cuanto al acceso a dichos archivos.

Cómo modificar nombres de archivos por lotes en linux

Aunque vayamos a usar un único comando son varias las formas que tenemos para modificar los nombres de los archivos. Me voy a centrar en dos casos que se pueden dar en cada una de ellas, renombrar solo archivos en la carpeta en la que estamos, o renombrar archivos de forma recursiva.

Así en cada caso podrás elegir escribir la línea que mejor te convenga y te será más fácil de memorizar la que te haga falta.

Cómo añadir un prefijo al nombre varios archivos por lotes en linux

En el primer caso supongamos que tenemos una serie de archivos a los que queremos añadir una cadena al principio del nombre, por ejemplo fotos que hemos hecho en Zaragoza y que tienen el formato DSC090832.jpg. La idea es que delante de todas estas imagenes aparezca el nombre de la ciudad donde se han tomado, y así poder buscar con más facilidad de forma local.

Léete también  Como excluir archivos al crear un tar desde consola de comandos

Para ello, una vez entremos con cd en la carpeta que las contiene ejecutaríamos el siguiente comando:

rename 's/^/Zaragoza /g' *
  • rename: es el comando que usaremos para renombrar. Deberías tenerlo pero si no con apt-get install rename debería ser suficiente.
  • »: lo que hay entre comillas simples será el comando de renombrado
  • s/: inicia la búsqueda de renombrado
  • /: separa entre cadena a buscar y cadena con la que reemplazar
  • /g: termina la búsqueda de renombrado
  • *: archivos a renombrar. Con * seleccionamos todos, si por ejemplo quieres renombrar solo archivos .jpg sería *.jpg.

Si lo quieres hacer de forma recursiva para carpetas en niveles inferiores hay dos formas y  los comandos serían estos:

find /carpeta/ -type f -exec rename 's/^/Zaragoza /' '{}' \;

o con dos comandos

shopt -s globstar
rename 's/^/Zaragoza /' **

El primer comando usa find para encontrar los archivos de forma recursiva a partir de una carpeta. No te olvides de poner ‘{}’ \; ya que son necesarios. En el segundo usamos shopt para activar el doble asterisco y que funcione de forma recursiva el comando rename.

Dependiendo de la cantidad de archivos tardará más o menos. También fíjate que he puesto un espacio detrás de la ciudad, así quedarían con un nombre como este: Zaragoza DSC090832.jpg. Si prefieres que no haya espacios puedes usar guiones o _ en lugar de espacios.

Cómo añadir un sufijo al nombre de múltiples archivos desde consola

En el caso de querer añadir un sufijo a nuestros archivos, por ejemplo para añadir una extensión (que también se incluye en el nombre del archivo) lo podemos hacer de una forma similar:

rename 's/.bkp/^/g' *

O si queremos de manera recursiva:

find /carpeta/ -type f -exec rename 's/.bkp/^/g' '{}' \;

o con dos comandos

shopt -s globstar
rename 's/.bkp/^/g' **

Así todos los archivos pasarían a incluir la extensión .bkp al final. Se quedarían como Zaragoza DSC090832.jpg.bkp. Si lo que estás buscando es cambiar la extensión por otra o añadir texto antes de la extensión tendrás que usar el método de sustitución siguiente.

Léete también  Cómo ver la contraseña de la wifi conectada en Windows 10 desde consola

Cómo sustituir parte del nombre de archivos por lotes en linux

Esta es la manera que suelo usar para modificar partes de nombres de múltiples archivos cuando tengo que renombrarlos en masa. Con esto podrías por ejemplo cambiar el DSC por FOTO.

rename 's/DSC/FOTO/g' *

O como en los otros casos para hacerlo recursivo:

find /carpeta/ -type f -exec rename 's/DSC/FOTO/g' '{}' \;

o con dos comandos

shopt -s globstar
rename 's/DSC/FOTO/g' **

Cómo comprobar rename antes de ejecutarlo

Si quieres realizar pruebas antes de renombrar definitivamente los archivos puedes añadir la opción -n. Al hacerlo lo que estamos indicando es que no queremos realizar la modificación de los nombres, sino que nos la muestre en pantalla.

rename -n 's/buscar/reemplazo/g' *

Una vez que hayas hecho las pruebas pertinentes puedes quitar el -n y volver a ejecutar el comando, de forma que los cambios se harán sobre los archivos.

¿Usas algún programa para renombrar archivos? ¿Tienes algún script para hacerlo de forma fácil que quieras compartir? Deja tu comentario y si te parece comparte.


AYUDANOS a poder seguir dando respuestas. Te podemos echar una mano y tú también a nosotros, símplemente dale a me gusta.