Desde Linux Isaac  

inotifywait: cómo monitorizar archivos y hacer copias automáticas cuando se detecte una modificación

inotifywait

inotifywait es parte del paquete inotify-tools y escucha eventos del kernel, concretamente syscalls para archivos (crear, modificar, mover, borrar) para disparar acciones en scripts. Es ideal cuando quieres ejecutar una copia o sincronización solo tras un cambio, evitando polling innecesario.

En este tutorial te mostraré cómo utilizarlo para detectar cualquier cambio en un archivo y generar inmediatamente una copia de seguridad, para tener siempre un respaldo al día con las últimas modificaciones…

Cómo instalar inotify-tools en Linux

Para instalar la herramienta inotify-tools en tu distro, basta con usar los siguientes comandos:

En Debian, Ubuntu y derivados (Linux Mint, Pop!_OS, etc.):
sudo apt update
sudo apt install inotify-tools -y
En Fedora, RHEL y derivados:
sudo dnf install inotify-tools -y
En Arch Linux y derivados (Manjaro, EndeavourOS):
sudo pacman -S inotify-tools --noconfirm
En openSUSE y SUSE:

sudo zypper install inotify-tools

Para comprobar que se ha instalado correctamente, puedes ejecutar:

inotifywait --help

Si te devuelve la lista de opciones y parámetros, el primer paso está completado con éxito.

Cómo instalar y configurar Rclone

Rclone es considerada la «navaja suiza» para la gestión de archivos en la nube desde la terminal. Admite multitutd de servicios de almacenamiento en la nube de forma nativa, gestionando de forma interna el descifrado y cifrado de tus archivos. Para su instalación, puedes usar lo siguiente:

sudo curl https://rclone.org/install.sh | sudo bash

Una vez instalado, inicia el asistente interactivo de configuración de Rclone, por ejemplo, yo lo haré con Proton Drive, pero es similar para otras nubes:

rclone config

Sigue detenidamente estos pasos en el asistente interactivo de la terminal:

  1. Escribe n (New remote) para crear una nueva conexión.
  2. Asigna un nombre a la conexión. Te sugerimos algo sencillo como: ProtonDrive.
  3. El asistente te mostrará una lista numerada con decenas de servicios en la nube. Escribe protondrive o busca el número correspondiente a «Proton Drive» en la lista y pulsa Enter.
  4. A continuación, te pedirá tu Username. Escribe la dirección de correo de tu cuenta de Proton.
  5. Te preguntará si quieres introducir la contraseña de forma interactiva. Selecciona y (Yes) y escribe tu contraseña de Proton (no se verá en pantalla por seguridad).
  6. Verificación en dos pasos (2FA): Si tienes activado el doble factor de autenticación en Proton (altamente recomendado), Rclone te pedirá el código OTP de tu aplicación de autenticación. Escríbelo y presiona Enter.
  7. Te preguntará si deseas usar una «configuración avanzada» (Edit advanced config). Escribe n (No).
  8. Finalmente, verás un resumen de la configuración. Si todo está bien, escribe y (Yes, this is OK) y luego q para salir del asistente.

Para comprobar que la conexión funciona, ejecuta el siguiente comando para listar las carpetas de tu nube:

rclone lsd ProtonDrive:

Si ves tus carpetas de Proton Drive en la terminal, rclone está conectado y funcionando…

Ejemplo de script (monitor y subir archivo modificado)

editor texto script sh

Ahora bien, para usar inotifywait para detectar cambios en archivos y que los copie directamente en la nube, puedes abrir tu editor de texto favorito y escribir esto:

#!/usr/bin/env bash
WATCH_DIR="/home/<nombre-usuario>/Ejemplo"
REMOTE="PortonDrive:backups/Ejemplo"
SYNC_DELAY=3

inotifywait -m -r -e close_write,create,moved_to --format '%w%f' "WATCH_DIR" | while read FILE do sleep $SYNC_DELAY if [ -f "$FILE" ]; then REL="{FILE#$WATCH_DIR/}"
echo "Subiendo $REL a $REMOTE"
rclone copyto "$FILE" "$REMOTE/$REL" --create-empty-src-dirs --transfers=4 --retries=3
fi
done

Recuerda modificar las rutas por las que necesites en tu caso, y el nombre de la nube por el que hayas puesto. Una vez hecho, guarda los cambios y genera un archivo de script llamado, por ejemplo, monitor-bakup.sh y dale permisos de ejecución:

chmod +x monitor-backup.sh

Y para ejecutarlo:

./monitor-backup.sh

Una vez en ejecución, en este caso, comprobará los cambios en la carpeta ~/Ejemplo y si se produce alguna novedad, se almacena en la nube, dentro de /backups/.

Y, por cierto, si tu sistema usa systemd y puedes crear unidades, considera .path + .service para integrar la monitorización con el gestor de servicios, aunque en cualquier caso inotifywait es la opción más directa…

Artículo original

Leave A Comment

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