Una solución rápida y sucia a esta pregunta que es compatible con todas las plataformas UNIX (no es específico de OSX, pero puede usarse en HP-UX, Solaris, Linux, etc.) es llamar a rsync desde el crontab del usuario, y dejar que la propia lógica de sincronización de carpetas de rsync determine si la carpeta ha cambiado o no. Un refinamiento para usar esto 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 va a sincronizar, pero esto no es necesario a menos que las carpetas que se van 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 intervalo de sondeo de un minuto 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 bastar para el caso rápido y sucio - en otras palabras, las carpetas se mantendrán actualizadas al minuto de hacer un cambio. Comprueba el archivo ~/.my_sync.log para ver los estados de ejecución - este archivo crecerá sin límites con el tiempo, así que una vez que se haya determinado el funcionamiento correcto, cambia ">>" por ">" para al menos registrar el estado más reciente de rsync.
Otra indicación es que se debe utilizar la opción -z de rsync cuando se sincroniza a través de una red. La opción -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 ficheros locales a un servidor, la opción -z puede omitirse.
Nota sobre el uso del crontab:
Si no puede editar su crontab con:
$ crontab -e
Entonces tendrás que darte permiso para tener un crontab. Consulte la página man de crontab. En OSX, esto es lo que hay que hacer - el cambio es ligeramente diferente en los sistemas linux: En pocas palabras, asegúrate de que tu 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.