Automatizando union y movimiento de PDFs a la nube (LInux)

 

Hace del 23 de Marzo que he migrado forzosamente a una oficina. Desde el primer momento, ha sido un dolor de cabeza trabajar con el volumen de tareas que tengo. Una de ellas consiste en descargar dos documentos. Anteriormente utilizaba un editor de PDF (En Wine) para unirlos, tomar el numero de serie de uno de los documentos, crear un directorio en mi servicio de la nube y guardar los tres documentos ahí (archivo1, archivo2 y fusion-con-el-nombre-de-la-carpeta. Algo que parece ser simple, se vuelve en algo de unos 3 minutos, con una buena gimnasia. Pero, esto, en Linux, se puede automatizar? Por supuesto que SI. Usando apenas un poco de IA, he creado esta guia:

La Solución: Un Pipeline de Procesamiento "Invisible"

Diseñamos un sistema basado en tres pilares: Extracción, Fusión y Sincronización.

1. Extracción de datos (El desafío del PDF)

Primer tarea, instalar las herramientas:

sudo apt update && sudo apt install poppler-utils inotify-tools -y

 Poppler nos va a ayudar a trabajar con los PDF y inotify a estar atento a cambios en el directorio "de la nube" 

El primer gran obstáculo fue el nombre del contrato. Necesitábamos que el sistema leyera el número de contrato automáticamente. Al intentar buscar el texto "Nº CTTO:", el sistema no devolvía nada.

¿Qué pasó? Al inspeccionar el archivo con comandos de bajo nivel (cat -A), descubrimos que el símbolo º se codificaba de forma no estándar (NM-BM-:).

La Solución: Implementamos una búsqueda flexible con grep que ignora caracteres especiales, enfocándose solo en la cadena "CTTO" y capturando el número que aparece dos líneas más abajo.

 

2. El Script "Cerebro" (Fusiona.sh)

Creamos un script que:

  1. Identifica los archivos en ~/Descargas.

  2. Extrae el número de contrato.

  3. Crea la carpeta en la ruta de Rclone.

  4. Fusiona y organiza los tres archivos en su lugar final.

¿Automatización total o control manual? Aquí evaluamos dos caminos:

  • Opción A (Vigilante): Que el sistema procese todo apenas detecte la descarga mediante inotify.

  • Opción B (Alias): Crear un comando corto (fusiona) para que el humano decida cuándo disparar el proceso.

 #!/bin/bash

# Configuración de rutas
ORIGEN="/home/usuario/Descargas"
DESTINO_BASE="/home/usuario/nube/"

# Identificamos archivos (usando comodín * para evitar problemas de tildes)
FILE_CONTRATO="$ORIGEN/Contrato.pdf"
FILE_BOLETA=$(ls $ORIGEN/BoletaDeDep*.pdf 2>/dev/null | head -n 1)

if [[ -f "$FILE_CONTRATO" && -f "$FILE_BOLETA" ]]; then
    
    # Extracción del número de contrato (Superando el error del símbolo º)
    NUM_CTTO=$(pdftotext "$FILE_CONTRATO" - | grep -A 2 "CTTO" | tail -n 1 | xargs)

    if [ -z "$NUM_CTTO" ]; then
        notify-send "Error" "No se encontró el número de contrato"
        exit 1
    fi

    # Creamos la carpeta destino y fusionamos
    DIR_FINAL="$DESTINO_BASE/$NUM_CTTO"
    mkdir -p "$DIR_FINAL"
    
    # Fusión: Contrato + Boleta = PDF con número de contrato
    pdfunite "$FILE_CONTRATO" "$FILE_BOLETA" "$DIR_FINAL/$NUM_CTTO.pdf"

    # Movemos los originales para mantener limpia la carpeta de Descargas
    mv "$FILE_CONTRATO" "$DIR_FINAL/Contrato.pdf"
    mv "$FILE_BOLETA" "$DIR_FINAL/BoletaDeDepósito.pdf"

    notify-send "Proceso Exitoso" "Contrato $NUM_CTTO organizado."
else
    notify-send "Aviso" "Faltan archivos para fusionar."
fi

 

Para no automatizar a ciegas (y evitar errores si descargo archivos que no corresponden), decidí usar un Alias. Esto me permite ejecutar el proceso solo cuando yo lo decido.

Editamos el archivo ~/.bash_aliases y agregamos:
alias fusiona='/home/usuario/Scripts/Fusiona.sh'

Ahora, con solo escribir fusiona en la terminal, todo el proceso ocurre en un segundo. 

4. El Vigilante de la Nube (Sincronización)

Para que la subida a Google Drive sea automática, configuramos un pequeño "demonio" con inotifywait que vigila la carpeta de destino. Apenas el script de fusión deja los archivos ahí, el vigilante detecta el cambio y ejecuta rclone sync.

#!/bin/bash

MONITOR="/home/usuario/nube/"

# Escuchamos eventos de escritura y movimiento de forma recursiva
inotifywait -m -r "$MONITOR" -e close_write -e moved_to | while read -r path action file; do
    # Disparamos la sincronización de Rclone
    rclone sync 
/home/usuario/nube/ nube: --verbose
    notify-send "Rclone" "Sincronización con la nube completada"
done

Pasos para implementarlo

Para los que quieran replicarlo, estos son los comandos esenciales:

  1. Instalación: sudo apt install inotify-tools poppler-utils

  2. El Alias: Agregué alias fusiona='/ruta/al/script.sh' en mi .bash_aliases.

  3. Inicio automático: El script de sincronización se añadió al Autoarranque de KDE Plasma para que esté listo apenas prendo la laptop.

Conclusión

Linux no es solo para programadores; es para cualquiera que quiera que la computadora trabaje para él. Hoy, con un solo comando en la terminal, resuelvo en 2 segundos lo que antes me llevaba varios minutos de clics y esperas.