También puedes usar inotifywait
del paquete inotify-tools.
inotifywait -r -m -e close_write --format '%w%f' /tmp | while read MODFILE
do
echo need to rsync $MODFILE ...
done
Lsyncd sería una buena solución para esto.
Lsyncd observa una interfaz de monitor de eventos de árboles de directorios locales (inotify o fsevents). Agrega y combina eventos durante unos segundos y luego genera uno (o más) procesos para sincronizar los cambios. Por defecto, esto es rsync. Lsyncd es, por lo tanto, una solución de espejo en vivo liviana que es comparativamente fácil de instalar, no requiere nuevos sistemas de archivos o dispositivos de bloqueo y no obstaculiza el rendimiento del sistema de archivos local.
En pocas palabras, utiliza el mismo tipo de herramientas para hacer el trabajo (inotify y rsync) como lo sugieren otras respuestas, pero es más fácil de configurar para alguien que no está familiarizado con las secuencias de comandos de shell.
Lo necesito mucho ya que mi código debe ejecutarse en cajas remotas y escribo código en una máquina local. Encontré una buena herramienta que puede usar para monitorear continuamente sus carpetas locales y sincronizarlas con una carpeta remota o local:https://github.com/axkibe/lsyncd
Un comando simple para sincronizar continuamente un directorio local con una máquina remota a través de ssh será:
lsyncd -log all -nodaemon -rsyncssh <local_path> <user>@<ip> <remote_path>
Al igual que con cualquier otro comando rsync, asegúrese de proporcionar la ruta de la carpeta correcta y verifique antes de ejecutar el comando. Casi había matado a una de mis máquinas remotas porque me olvidé de dar un directorio de destino correcto. Asegúrese de no perderse la ruta remota y no use '/' a menos que sepa lo que está haciendo.