sincronización bidireccional con rsync


11

Estoy tratando de configurar la sincronización bidireccional o bidireccional con rsync. En mi caso, solo necesito eliminar los archivos al sincronizar de B a A. Por lo tanto, estaba pensando en ejecutar rsync dos veces de la siguiente manera:

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

Este problema con esta solución es que cuando ejecuto rsync (B-> A) que sería justo después de ejecutar rsync (AB), cualquier archivo nuevo que se cree entre la sincronización también se eliminará.

¿Hay alguna manera de que pueda especificar una marca de tiempo como condición para que solo elimine el archivo si se creó antes de esta fecha / hora?

Actualizado:

Entiendo que hay una solución al unísono, pero el problema con el unísono se requiere para instalar en ambos extremos. Estoy sincronizando con un servidor remoto y no puedo instalar al unísono en el extremo remoto.


Hay una pregunta muy similar con algunas respuestas más aquí: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Respuestas:


4

Puede probar osync, que está diseñado para esta tarea exactamente. Una vez configuré una secuencia compleja de comandos rsync para hacer el trabajo, pero ahora uso osync.

https://github.com/deajan/osync

Utiliza rsync internamente, por lo que debería ser adecuado para cualquier situación en la que pueda usar rsync.


1
Gracias Mark. Estaba a punto de responder mi propia pregunta. Encontré un script muy similar llamado bsync ( github.com/dooblem/bsync ), básicamente, utiliza diff para descubrir qué necesita ser sincronizado. Como no espero ningún conflicto en la sincronización, también modifico un poco este script para que se ejecute en silencio cuando se ejecuta con un trabajo cron.
Raza

7

rsynces la herramienta incorrecta para esta tarea, exactamente por las razones que ha encontrado. En cambio, considere usar unison:

unison A/ B/

La primera vez que ejecute esto, identificará los archivos que están únicamente en A, y aquellos que están únicamente en B. También marcará los que están en ambos lugares y le pedirá que identifique cuál se sobrescribirá.

La próxima vez que ejecute esto se copiará cambia de Aa B, y también Ba A, marcar todos los archivos que se han cambiado en los dos lugares para la resolución manual.

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

Hay una serie de indicadores útiles disponibles unisonque ayudan a automatizar el proceso definiendo supuestos y, por lo tanto, reduciendo el número de preguntas que se le hacen durante la sincronización.


3
Vi una solución al unísono, pero el problema es que debo instalar en ambos extremos. Estoy sincronizando con un control remoto y no puedo instalar al unísono en el extremo remoto.
Raza

1
No ayuda al OP, pero estaba buscando unísono . Veo que hay paquetes de Debian y es compatible con el transporte ssh.
Ted

1
Hay posibilidades de usar unísono sin instalarlo en el servidor, vea los comentarios en esta respuesta stackoverflow.com/a/2936711 que apunta a i3vi3v.wordpress.com/2013/01/09/…
Thomas

-1

Lo que realmente necesitas es Rclone . Rclone es rsync para almacenamiento en la nube (box, dropbox, nextcloud, ftp, etc.) y almacenamiento local.


2
¿Cómo instalarían y usarían rclone para resolver su problema?
Jeff Schaller

3
rclone aún no tiene sincronización bidireccional.
sean
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.