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

5

Encontré este comando para copiar el contenido de la fuente en una carpeta de destino.

rsync -r source/* destination

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

¿Es esto posible?

    
pregunta izzur 28.12.2013 - 12:09

3 respuestas

6

Podrías usar acciones de Automator y Carpeta para ver la carpeta y ejecutar el script.

Al iniciar Automator y elegir Nuevo, una de las opciones dadas es realizar una 'Acción de carpeta'. En la parte superior de la pantalla, después de seleccionar Acción de carpeta, tiene la opción de elegir una carpeta para "ver".

Loquecreoquequerríahacerensucasoesseleccionar'Utilidades'enlacolumnadelaizquierdayluegoarrastrar'Ejecutarelscriptdeshell'desdelasegundacolumnaalaventanadelflujodetrabajo.

Aquí es donde escribirá cualquier secuencia de comandos que desee ejecutar cuando se realicen cambios en la carpeta. En este caso, su script rsync.

    
respondido por el StephenCollins 29.12.2013 - 03:39
3

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.

    
respondido por el Billy McCloskey 29.12.2013 - 06:22
1

La herramienta que usaría para monitorear tus carpetas es Hazel . Sería excelente comenzar el guión y podría terminar usándolo para muchas más carpetas a lo largo del tiempo a medida que piense en cosas que podría automatizar.

    
respondido por el bmike 29.12.2013 - 03:55

Lea otras preguntas en las etiquetas