5 votos

Utiliza rsync para copiar automáticamente un archivo a otra carpeta

He encontrado este comando para copiar el contenido de la fuente a una carpeta de destino.

rsync -r source/* destination

Lo que realmente me gustaría es que este comando se ejecutara automáticamente cada vez que se añade un archivo a mi carpeta de origen.

¿Es posible?

6voto

user13224 Puntos 39

Podrías usar, Automator y acciones de carpeta para vigilar la carpeta y ejecutar el script.

Al iniciar Automator y elegir Nuevo, una de las opciones que se dan es hacer una 'Acción de carpeta'. En la parte superior de la pantalla, después de seleccionar Acción de carpeta, se le da la opción de elegir una carpeta para "vigilar".

enter image description here

Lo que creo que deberías hacer en tu caso es seleccionar "Utilidades" en la columna de la izquierda y arrastrar "Ejecutar Shell script" desde la segunda columna a la ventana de flujo de trabajo.

enter image description here

Aquí es donde escribirías cualquier script que quieras que se ejecute cuando se hagan cambios en la carpeta. En este caso tu script rsync.

enter image description here

3voto

Bill McCloskey Puntos 141

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.

1voto

Oskar Puntos 1242

La herramienta que yo utilizaría para supervisar tus carpetas es Hazel . Sería excelente para poner en marcha el script y podrías acabar usándolo para muchas más carpetas con el tiempo a medida que se te ocurran cosas que podrías automatizar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X