Una solución rápida y sucia a esta pregunta que es portátil en las plataformas UNIX (no es específica de OSX, pero puede usarse en HP-UX, Solaris, Linux, etc.) es llamar a rsync desde el archivo crontab del usuario, y dejar que la propia lógica de sincronización de carpetas de rsync determine si la carpeta ha sido cambiada o no. Una mejora al usar esta solución portátil es envolver la llamada a rsync con una prueba de fecha entre un archivo tocado (en realidad, su hora de modificación) y la hora de modificación de la carpeta que se debe sincronizar, pero esto no es necesario a menos que las carpetas a sincronizar sean muy grandes (profundas y / o anchas). Una sola carpeta con varias subcarpetas es ideal para esta solución.
Una entrada para el crontab que realizará el caso "rápido y sucio" en un minuto de intervalo de sondeo es:
# run sync every minute:
* * * * * /usr/bin/rsync -avz $HOME/source_path $HOME/target/path 1>> $HOME/.my_sync.log 2>&1
Eso debería hacerse para el caso rápido y sucio. En otras palabras, las carpetas se mantendrán actualizadas dentro de un minuto de hacer un cambio. Revise el archivo ~ / .my_sync.log para ver los estados de ejecución: este archivo crecerá sin límites con el tiempo, por lo que una vez que se haya determinado la operación correcta, cambie "> >" a ">" para al menos registrar el estado rsync más reciente.
Otro puntero es que el modificador -z a rsync debe usarse cuando se sincroniza a través de una red. El conmutador -z hará que se utilice la compresión para las transferencias de archivos de red. Cuando se utiliza rsync para sincronizar entre carpetas en sistemas de archivos locales a un servidor, el interruptor -z generalmente se puede omitir.
Nota sobre el uso de crontab:
Si no puedes editar tu crontab con:
$ crontab -e
Entonces tendrás que darte permiso para tener un crontab. Vea la página de manual de crontab. En OSX, esto es lo que se debe hacer; el cambio es ligeramente diferente en los sistemas Linux: en pocas palabras, asegúrese de que su ID de usuario esté en /usr/lib/cron/cron.allow o que / usr / lib / cron / cron.allow no existe. Además, asegúrese de que su ID de usuario no esté en /usr/lib/cron/cron.deny.