Renombrando Archivos PDF con Fecha de Modificación en Linux
Renombrando Archivos PDF con Fecha de Modificación en Linux
¿Tienes una colección de archivos PDF desorganizados y quieres renombrarlos automáticamente con un formato específico? En este post, te mostraré cómo crear un script en Bash que selecciona un directorio, encuentra todos los archivos `.pdf` que no tengan el prefijo `YYMMDD-nombre.pdf`, y los renombra usando la fecha de modificación del archivo. Este formato es útil para organizar documentos de manera cronológica.
Requisitos
- Un sistema Linux (Ubuntu, Debian, Fedora, etc.).
- Conocimientos básicos de terminal y Bash.
- Permisos de escritura en el directorio que deseas procesar.
Introducción
En este post, comparto un script en Bash que automatiza el renombrado de archivos PDF en un directorio específico. El objetivo es identificar aquellos archivos que no tienen el prefijo `YYMMDD-` (donde `YY` son los últimos dos dígitos del año, `MM` el mes de 01 a 12, y `DD` el día de 01 a 31) y renombrarlos usando su fecha de modificación en ese formato. Esto es útil para organizar documentos, como trabajos finales o reportes, manteniendo un estándar claro basado en metadatos del archivo.
El Script
Aquí está el script Bash que realiza esta tarea:
#!/bin/bash # Script para renombrar archivos PDF con fecha de modificación en formato YYMMDD-nombre.pdf # Verificar si se proporcionó un directorio como argumento if [ $# -ne 1 ]; then echo "Uso: $0 <directorio>" echo "Ejemplo: $0 /ruta/a/tus/pdfs" exit 1 fi # Asignar el directorio proporcionado DIRECTORY="$1" # Verificar si el directorio existe if [ ! -d "$DIRECTORY" ]; then echo "Error: El directorio '$DIRECTORY' no existe." exit 1 fi # Cambiar al directorio especificado cd "$DIRECTORY" || { echo "Error: No se pudo acceder al directorio '$DIRECTORY'." exit 1 } # Contador para archivos procesados COUNT=0 # Buscar archivos PDF y procesarlos for file in *.pdf; do # Verificar si hay archivos PDF en el directorio if [ ! -e "$file" ]; then echo "No se encontraron archivos PDF en '$DIRECTORY'." exit 0 fi # Comprobar si el nombre ya tiene el prefijo YYMMDD- if [[ "$file" =~ ^[0-9]{6}-.*\.pdf$ ]]; then echo "Saltando '$file': ya tiene el formato YYMMDD-." continue fi # Obtener la fecha de modificación del archivo (YYMMDD) MOD_DATE=$(stat -c %y "$file" | cut -d' ' -f1 | sed 's/-//g' | cut -c3-8) # Construir el nuevo nombre con la fecha NEW_NAME="${MOD_DATE}-${file}" # Renombrar el archivo if mv -n "$file" "$NEW_NAME"; then echo "Renombrado: '$file' -> '$NEW_NAME'" ((COUNT++)) else echo "Error al renombrar '$file'. Puede que '$NEW_NAME' ya exista." fi done # Resumen final echo "Proceso completado. Archivos renombrados: $COUNT."
Explicación del Script
- Línea inicial: `#!/bin/bash` indica que es un script Bash.
- Verificación de argumentos: Comprueba que se pase un directorio como parámetro (`$1`), mostrando un mensaje de uso si falta.
- Validación del directorio: Asegura que el directorio exista y sea accesible.
- Bucle sobre PDFs: Itera sobre todos los archivos `.pdf` en el directorio:
- Si no hay PDFs, informa y termina.
- Si el archivo ya tiene el prefijo `YYMMDD-` (ej. `250315-documento.pdf`), lo salta.
- Usa `stat -c %y` para obtener la fecha de modificación (formato `YYYY-MM-DD`), extrae `YYMMDD` con `sed` y `cut`.
- Renombra con `mv -n` (sin sobrescribir si ya existe).
- Contador: Lleva la cuenta de archivos renombrados y muestra un resumen.
Uso del Script
- Guarda el script como `renamepdfs.sh`.
Dale permisos de ejecución:
chmod +x rename_pdfs.sh
Ejecútalo especificando un directorio:
./rename_pdfs.sh /ruta/a/tus/pdfs
Ejemplo de salida:
Saltando '250314-informe.pdf': ya tiene el formato YYMMDD-. Renombrado: 'documento.pdf' -> '250315-documento.pdf' Proceso completado. Archivos renombrados: 1.
Notas y Precauciones
- Fecha de modificación: Depende de la última vez que el archivo fue modificado, no de su creación. Si necesitas la fecha de creación, ajusta usando `stat -c %w` (si el sistema lo soporta).
- Colisiones: Usa `-n` en `mv` para evitar sobrescribir archivos existentes; revisa manualmente si hay errores.
- Portabilidad: Probado en sistemas Linux con `stat` de GNU coreutils. En macOS, cambia `stat -c %y` por `stat -f %Sm`.
Conclusión
Este script es una herramienta práctica para mantener tus PDFs organizados con un estándar basado en fechas. Puedes adaptarlo para otros formatos (`.docx`, `.txt`) cambiando `*.pdf` por el patrón deseado. ¡Automatiza y simplifica tu gestión de archivos en Linux!