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 posible?


Podrías usar un script que combine rsync y inotify como éste
Bert

Respuestas:


6

Puede usar las acciones Automator y Folder 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".

enter image description here

Lo que creo que querría hacer en su caso es seleccionar 'Utilidades' en la columna de la izquierda y luego arrastrar 'Ejecutar shell script' desde la segunda columna a la ventana de flujo de trabajo.

enter image description here

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

enter image description here


Esta es una gran respuesta que se beneficiaría de tener algunos de los contenidos detrás de ese enlace explicados en la publicación.
Ian C.

Más detalles añadidos.
StephenCollins

3

Una solución rápida y sucia a esta pregunta. que es portátil a través de plataformas UNIX (no es específico de OSX, pero se puede usar 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 se ha cambiado o no. Un refinamiento al uso de este 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 a sincronizar sean muy grandes (profunda y / o ancho). 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 en un minuto después de realizar un cambio. Compruebe 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 "& gt; & gt;" a "& gt;" 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 del crontab:

Si no puedes editar tu crontab con:

$ crontab -e

Entonces tendrás que darte permiso para tener un crontab. Consulte la página de manual de crontab. En OSX, esto es lo que debe hacerse: 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.


1

La herramienta que usaría para monitorear tus carpetas es Color avellana . 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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.