Icono del sitio Binario 0

Automatización de Renombrado de Archivos en Subcarpetas con Bash

Artículos Guías Manuales Sistemas Linux Windows Binario 0

Artículos Guías Manuales Sistemas Linux Windows Binario 0

FacebookEmailWhatsAppLinkedInRedditXShare

En el mundo de la gestión de archivos, especialmente cuando trabajamos con grandes volúmenes de datos distribuidos en múltiples subcarpetas, surge la necesidad de automatizar tareas repetitivas como el renombrado de archivos. En este artículo, exploraremos un script en Bash que recorre una carpeta y todas sus subcarpetas, renombrando los archivos de forma automática con nombres únicos basados en cadenas aleatorias, la fecha y la hora. Este enfoque es ideal para organizar datos, evitar conflictos de nombres o garantizar identificadores únicos.

¿Qué hace el script?

El script realiza las siguientes tareas:

  1. Recorre una carpeta y sus subcarpetas: Usa el comando find para localizar todos los archivos, sin importar cuán profundas estén las subcarpetas.
  2. Genera un nombre único para cada archivo: Combina una cadena aleatoria, la fecha y hora actuales, y el nombre base del archivo original.
  3. Renombra cada archivo: Mantiene la extensión original pero asegura que el nuevo nombre sea único.

El código

A continuación, presentamos el script completo:

#!/bin/bash

# Directorio que contiene los archivos
DIRECTORIO="/ruta/a/tu/carpeta"

# Cambiar al directorio especificado
cd "$DIRECTORIO" || exit

# Recorrer todos los archivos y subcarpetas
find . -type f | while read -r archivo; do
# Generar una cadena aleatoria de 6 caracteres
cadena_aleatoria=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 6)

# Obtener la fecha y hora actuales en el formato YYYYMMDD-HHMMSS
fecha_hora=$(date +"%Y%m%d-%H%M%S")

# Extraer la extensión del archivo
extension="${archivo##*.}"

# Extraer el nombre base del archivo sin extensión
nombre_base="${archivo##*/}" # Obtiene solo el nombre del archivo
nombre_base="${nombre_base%.*}"

# Construir el nuevo nombre del archivo manteniendo la extensión
nuevo_nombre="${cadena_aleatoria}_${fecha_hora}_${nombre_base}.${extension}"

# Obtener el directorio que contiene el archivo
directorio=$(dirname "$archivo")

# Renombrar el archivo
mv "$archivo" "$directorio/$nuevo_nombre"
done

Cómo usarlo

  1. Configura el directorio: Modifica la variable DIRECTORIO para que apunte a la carpeta que contiene los archivos que deseas procesar.
  2. Guarda el script: Guarda el código anterior en un archivo, por ejemplo, renombrar.sh.
  3. Hazlo ejecutable: Usa el comando chmod +x renombrar.sh para hacerlo ejecutable.
  4. Ejecuta el script: Corre el script con ./renombrar.sh desde la terminal.

Detalles técnicos

  1. Cadena aleatoria: Se genera una cadena de 6 caracteres alfanuméricos con tr y /dev/urandom, asegurando una buena aleatoriedad.
  2. Formato de fecha: date +"%Y%m%d-%H%M%S" proporciona una marca de tiempo precisa al nivel de segundos.
  3. Preservación de extensiones: El script extrae la extensión original del archivo y la mantiene en el nuevo nombre.
  4. Evita errores en rutas: Usa comillas y dirname para manejar correctamente nombres con espacios o caracteres especiales.

Ventajas del script

Casos de uso

Conclusión

Este script en Bash es una solución poderosa y sencilla para el renombrado masivo de archivos. Su diseño modular permite personalizarlo fácilmente para otros requisitos, como añadir prefijos específicos o filtrar por tipos de archivo. Al integrarlo en tus flujos de trabajo, puedes ahorrar tiempo y reducir errores en la gestión de archivos.

Salir de la versión móvil