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:
- Recorre una carpeta y sus subcarpetas: Usa el comando
find
para localizar todos los archivos, sin importar cuán profundas estén las subcarpetas. - Genera un nombre único para cada archivo: Combina una cadena aleatoria, la fecha y hora actuales, y el nombre base del archivo original.
- 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
- Configura el directorio: Modifica la variable
DIRECTORIO
para que apunte a la carpeta que contiene los archivos que deseas procesar. - Guarda el script: Guarda el código anterior en un archivo, por ejemplo,
renombrar.sh
. - Hazlo ejecutable: Usa el comando
chmod +x renombrar.sh
para hacerlo ejecutable. - Ejecuta el script: Corre el script con
./renombrar.sh
desde la terminal.
Detalles técnicos
- Cadena aleatoria: Se genera una cadena de 6 caracteres alfanuméricos con
tr
y/dev/urandom
, asegurando una buena aleatoriedad. - Formato de fecha:
date +"%Y%m%d-%H%M%S"
proporciona una marca de tiempo precisa al nivel de segundos. - Preservación de extensiones: El script extrae la extensión original del archivo y la mantiene en el nuevo nombre.
- Evita errores en rutas: Usa comillas y
dirname
para manejar correctamente nombres con espacios o caracteres especiales.
Ventajas del script
- Automatización total: Puedes procesar cientos de archivos en minutos sin intervención manual.
- Estructura jerárquica intacta: Renombra archivos sin alterar la estructura de las carpetas.
- Evita conflictos: Los nombres únicos garantizan que no haya sobrescritura accidental.
Casos de uso
- Preparación de datos para análisis: Útil cuando los nombres originales de los archivos no tienen valor semántico y solo importa identificarlos de forma única.
- Migración de archivos: Asegura que los nombres de archivos no entren en conflicto durante la transferencia.
- Organización de proyectos: Establece un sistema de nombres uniforme para archivos distribuidos en múltiples subcarpetas.
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.