Una soluzione rapida e sporca a questa domanda che è portatile su piattaforme UNIX (non specifica per OSX, ma può essere utilizzata su HP-UX, Solaris, Linux, ecc.) è chiamare rsync dal crontab dell'utente e lasciare che la stessa logica di sincronizzazione della cartella di rsync determini se la cartella è stata cambiata o meno. Un perfezionamento dell'uso di questa soluzione portatile è di racchiudere la chiamata in rsync con un test della data tra un file toccato (in realtà il suo tempo di modifica) e il tempo di modifica della cartella deve essere sincronizzato, ma questo non è necessario a meno che le cartelle da sincronizzare siano molto grandi (profonde e / o ampie). Una singola cartella con diverse sottocartelle è l'ideale per questa soluzione.
Una voce per il crontab che eseguirà il caso "rapido e sporco" in un intervallo di polling minuto è:
# run sync every minute:
* * * * * /usr/bin/rsync -avz $HOME/source_path $HOME/target/path 1>> $HOME/.my_sync.log 2>&1
Dovrebbe farlo per il caso rapido e sporco - in altre parole, le cartelle saranno mantenute aggiornate entro un minuto dal cambiamento. Controlla il file ~ / .my_sync.log per gli stati di esecuzione - questo file crescerà senza limiti nel tempo, quindi una volta determinata l'operazione corretta, modifica "> >" a ">" per registrare almeno lo stato rsync più recente.
Un altro puntatore è che l'opzione -z di rsync dovrebbe essere usata durante la sincronizzazione su una rete. L'opzione -z causerà la compressione da utilizzare per i trasferimenti di file di rete. Quando si usa rsync per sincronizzare tra cartelle su file system locali a un server, l'opzione -z può essere di solito omessa.
Nota sull'uso di crontab:
Se non puoi modificare il tuo crontab con:
$ crontab -e
Quindi dovrai darti il permesso di avere un crontab. Vedi la pagina man di crontab. In OSX, questo è ciò che deve essere fatto - la modifica è leggermente diversa sui sistemi Linux: In poche parole, assicurati che il tuo id utente sia in /usr/lib/cron/cron.allow o che / usr / lib / cron / cron.allow non esiste. Inoltre, assicurati che l'ID utente non sia in /usr/lib/cron/cron.deny.