Vous pouvez également utiliser inotifywait
du paquet inotify-tools.
inotifywait -r -m -e close_write --format '%w%f' /tmp | while read MODFILE
do
echo need to rsync $MODFILE ...
done
Lsyncd serait une bonne solution pour cela.
Lsyncd surveille une interface de moniteur d'événements d'arbres de répertoires locaux (inotify ou fsevents). Il agrège et combine les événements pendant quelques secondes puis lance un (ou plusieurs) processus pour synchroniser les changements. Par défaut, il s'agit de rsync. Lsyncd est donc une solution de miroir en direct légère, relativement facile à installer, ne nécessitant pas de nouveaux systèmes de fichiers ou de périphériques de blocage et n'entravant pas les performances du système de fichiers local.
En fin de compte, il utilise le même type d'outils pour faire le travail (inotify et rsync) que suggéré par d'autres réponses, mais il est plus facile à configurer pour quelqu'un qui n'est pas familier avec les scripts shell.
J'en ai beaucoup besoin car mon code doit s'exécuter sur des boîtiers distants et j'écris du code sur une machine locale. J'ai trouvé un bel outil que vous pouvez utiliser pour surveiller en permanence vos dossiers locaux et les synchroniser avec un dossier distant ou local :https://github.com/axkibe/lsyncd
Une commande simple pour synchroniser en continu un répertoire local avec une machine distante via ssh sera :
lsyncd -log all -nodaemon -rsyncssh <local_path> <user>@<ip> <remote_path>
Comme avec toute autre commande rsync, assurez-vous de donner le bon chemin d'accès au dossier et vérifiez avant d'exécuter la commande. J'ai failli tuer une de mes machines distantes car j'ai manqué de donner un répertoire de destination correct. Assurez-vous de ne pas manquer le chemin distant et n'utilisez pas '/' à moins que vous ne sachiez ce que vous faites.