Bash Scripting (XI). Renombrar Varios Archivos de Forma Masiva

Muy buenas. Ahí va otro post de la serie de Linux Scripting. Así como los primeros posts de esta serie estaban centrados en la parte más teórica acerca del entorno Bash, la sintaxis básica del lenguaje, etc., ahora estamos ya en la parte de los ejemplos prácticos de scripts que tu mismo puedes copiar, aplicar y/o re-adaptar a tus necesidades.

Este es ya el sexto ejemplo práctico de esta serie. En este caso, verás como programar un script que se encargue de renombrar un conjunto de archivos de forma masiva. ¡Vamos allá!

Tabla de contenidos:

  1. Descripción y propósito del script
  2. Condiciones de ejecución
  3. Creación del script
  4. Código fuente
  5. Explicación del código fuente
  6. Ejecución del script
  7. Programar la ejecución del script
  8. Continuación

Descripción y Propósito del Script

En este ejemplo, como he comentado al principio, te enseñare a programar un script que se encargará de realizar un renombrado masivo de todos los archivos que se encuentren en un directorio concreto, y que sean de una extensión determinada.

Esto es algo que, aunque no necesariamente común, si que puede resultar de gran utilidad en situaciones concretas, por el tiempo que te puede ahorrar, sobretodo si necesitas hacerlo con un gran numero de ficheros.

Imagina que, por ejemplo, tienes una carpeta con todos las fotos de las vacaciones, y te gustaría re-nombrarlas todas, añadiendo, por ejemplo, el nombre de la ciudad delante de cada foto. O que quieres cambiar el criterio a la hora de renombrar todos los archivos de un proyecto.

Lo cierto es que pueden haber un gran numero de casos en los que te puedas ver con esa necesidad, y en todos ellos, hacer la tarea de forma manual para cada archivo resultaría una tarea del todo absurda e ineficiente.

Estamos, de hecho, en un caso de manual que se presta a la automatización. Por eso mismo, lo más ideal en estos casos es disponer de un script en el que tu solo tengas que indicar los criterios que quieres seguir para el renombrado, y él se encargue del resto.

Condiciones de Ejecución

Este script debería poder funcionar correctamente en cualquier distribución GNU/Linux, sin tener en cuenta ningún requisito previo, a nivel de instalación de herramientas adicionales.

Lo más importante que debes tener en cuenta es que el script re-nombrará todos los archivos en el directorio actual que tengan la extensión especificada, por lo que debes asegúrate de estar en el directorio correcto antes de ejecutarlo.

Además, si algunos de los archivos tienen nombres o caracteres especiales, es posible que debas modificar el script para gestionarlos adecuadamente.

Creación del Script

A continuación te dejo los pasos que debes seguir para crear y ejecutar el script, y en el siguiente apartado te dejo el código del mismo, que luego tu mismo podrás adaptar segun tus preferencias.

  1. Abrir un nuevo fichero de texto con tu editor de texto favorito. Puedes utilizar un editor gráfico como Gedit en GNOME, o un editor por consola como Vim.
  2. Copiar el código del script que tienes a continuación, y adaptarl a tus preferencias particulares en caso de que lo desees.
  3. Guardar el archivo en la ubicación que desees dentro de tu Home. El fichero puede tener el nombre que desees, pero debe terminar con la extensión .sh.

Código Fuente

A continuación tienes el código que debes copiar en el fichero recién creado.

#!/bin/bash

# Pedir al usuario que introduzca el prefijo a utilizar para añadir en cada archivo
read -p "Introduce el prefijo que quieres utilizar para renombrar los archivos: " prefix

# Pedir al usuario que introduzca la extensión de los archivos que desea renombrar
read -p "Introduce la extensión de los archivos que quieres renombrar (.txt, .pdf, .png, .mp4, etc): " extension

# Inicializar variablede contador para asignar un nuevo nombre a cada archivo
counter=1

# Bucle for para pasar por cada uno de los archivos y realizar el renombrado
for file in *$extension
do
    # Generar el nuevo nombre de archivo, utilizando el prefijo introducido por el usuario y el contador
    name="$prefix$counter$extension"

    # Renombrar el archivo
    mv "$file" "$name"

    # Incrementar el contador en una unidad
    counter=$((counter+1))

done

Explicación del Código Fuente

Visto el código fuente, a continuación te explicaré que hace cada una de las líneas. Vayamos por partes.

Primero de todo, pedimos al usuario que introduzca el prefijo que querrá utilizar para añadir como parte del nombre de los diferentes archivos a renombrar:

read -p "Introduce el prefijo que quieres utilizar para renombrar los archivos: " prefix

A continuación, le pedimos de nuevo que teclee la extensión de los ficheros que quiere renombrar. Esto servirá de filtro, para modificar únicamente los archivos que tengan ese tipo de extensión:

read -p "Introduce la extensión de los archivos que quieres renombrar (.txt, .pdf, .png, .mp4, etc): " extension

Seguidamente inicializaremos una variable que denominaremos counter, que iremos actualizando dentro del bucle, y que utilizaremos para asignar un valor incremental a cada fichero.

counter=1 

Finalmente, debemos construir un bucle for para iterar a través de cada archivo en el directorio actual que tenga la extensión especificada por el usuario. En cada iteración, primero se defina el nuevo nombre de archivo usando las variables que indican el prefijo y el valor del contador, para luego renombrar el archivo con el nuevo nombre, utilizando el comando mv. Al final de cada iteración hay que incrementar también el contador.

for file in *$extension
do
    name="$prefix$counter$extension"
    mv "$file" "$name"
    counter=$((counter+1))
done

Ten en cuenta que este script renombrará todos los archivos en el directorio actual que tengan la extensión especificada, así que asegúrate de estar en el directorio correcto antes de ejecutarlo.

Además, si algunos de los archivos tienen nombres o caracteres especiales, es posible que debas modificar el script para gestionarlos adecuadamente.

Ejecución del Script

Una vez creado y guardado el script, es hora de ejecutarlo. Para ello, tan solo debes abrir una ventana de terminal, y ejecutar el siguiente comando.

bash nombre-script.sh

Como el script se encargará de re-nombrar los archivos del directorio actual, lo mejor es que lo guardes en el mismo directorio que contiene los archivos a re-nombrar.

Cuando lo empieces a ejecutar, lo primero que verás es que te pedirá el prefijo a utilizar como nombre de los diferentes archivos, y, seguidamente, la extensión de los archivos que quieres renombrar.

Hecho esto, el script irá pasando recursivamente por cada uno de los archivos que encuentre de la extensión dada, los re-nombrará, utilizando el prefijo dado, y un numero incremental.

Continuación

Antes de finalizar, te dejo a continuación con todos los posts publicados dentro de esta serie sobre Linux scripting, para que puedas consultarlos si necesitas profundizar en cualquiera de los aspectos teóricos explicados.

  1. Linux scripting. Descubre el enorme poder de automatizar tareas
  2. Linux scripting con Bash. Introducción a Bash
  3. Linux scripting con Bash. Sintaxis del lenguaje
  4. Linux scripting con Bash. Crear y ejecutar tu primer script
  5. Linux scripting con Bash. Ejecutar script en el inicio del sistema
  6. Linux scripting con Bash. Ejemplo 1. Setup post-instalación para Ubuntu
  7. Linux scripting con Bash. Ejemplo 2. Escaneo mensual de malware
  8. Linux scripting con Bash. Ejemplo 3. Realizar un Backup y enviarlo en una unidad externa
  9. Linux scripting con Bash. Ejemplo 4. Limpiar paquetes no necesarios en Ubuntu
  10. Linux scripting con Bash. Ejemplo 5. Limpiar espacio en disco en Ubuntu

Un saludo y hasta la próxima!

Categorías LinuxEtiquetas

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.

search previous next tag category expand menu location phone mail time cart zoom edit close