Soluzione 1:
Se sei abbastanza fortunato da essere su una distribuzione basata su debian, apt-get install dnotify
. Altre distribuzioni probabilmente hanno qualcosa di simile - cerca il dnotify
nome.
dnotify è un semplice programma basato sull'API dnotify del kernel Linux 2.4.19+.dnotify può eseguire un comando specificato ogni volta che cambia il contenuto di una directory specifica. Viene eseguito dalla riga di comando e accetta due argomenti:una o più directory da monitorare e un comando da eseguire ogni volta che una directory viene modificata. Le opzioni controllano su quali eventi attivare il trigger:quando un file è stato letto nella directory, quando ne è stato creato uno, eliminato e così via.
Se vuoi gestirlo all'interno del tuo programma, dnotify è anche l'API che vuoi usare.
Soluzione 2:
Puoi eseguire uno script con gli strumenti inotify, qualcosa del genere. Controllerà la directory per le modifiche nei file modificati, nei nuovi file e nei file eliminati, quindi eseguirà lo script.
#!/bin/sh
while inotifywait -e modify -e create -e delete /home/me/code; do
rsync [options] /home/me/code/ /media/nfs/code/
done
Soluzione 3:
incron è fondamentalmente quello che vuoi, penso. Utilizza inotify come meccanismo di notifica (che, come altri hanno sottolineato, sostituisce dnotify), ma non richiede uno script che venga eseguito continuamente, utilizzando inotifywait o simili (sebbene, ovviamente, il demone incron sia sempre in esecuzione). I "crontab" a livello di sistema e i "crontab" dell'utente sono supportati in modo simile al cron standard, ma invece di specificare gli orari come trigger, vengono utilizzati eventi inotify e nomi di file/directory.
incron è pacchettizzato per molte distribuzioni, incluse Ubuntu e Debian, credo.