Sincronización bidireccional con rsync


Tengo una carpeta a/ y una carpeta remota A/. Ahora corro algo como esto en un Makefile:

get-music:
 rsync -avzru server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

Cuando hago sync-music, primero obtiene todas las diferencias de servidor a local y luego lo contrario, enviando todas las diferencias de local a servidor.

Esto funciona muy bien solo si solo hay actualizaciones o nuevos archivos en el futuro. Si hay eliminaciones, no hace nada.

En rsync hay opciones delete delete y after delete-after para ayudar a lograr lo que quiero pero la cosa es que no funciona en una sincronización de 2 vías.

Si quiero eliminar archivos de servidor en un syn, cuando se han eliminado archivos locales, funciona, pero si, por alguna razón (explicada después) tengo algunos archivos que no están en el servidor pero existen localmente y se eliminaron, quiero eliminarlos localmente y no copiar el servidor (como sucede).

La cosa es que tengo 3 máquinas en contexto:

  1. escritorio
  2. cuaderno
  3. servidor de inicio

Así que, a veces, el servidor tendrá archivos que se eliminaron con una sincronización de notebook, por ejemplo, y luego, cuando ejecute una sincronización con mi escritorio (donde aún existen los archivos del servidor eliminados), quiero que estos archivos se eliminen y no se copien nuevamente al servidor.

Supongo que esto solo es posible con una base de datos y un seguimiento de las operaciones :P

¿Alguna solución más sencilla? Agradecer.

Author: menjaraz, 2010-05-30

9 answers

Prueba al unísono: http://www.cis.upenn.edu / ~bcpierce / unison /

Sintaxis: unison dirA/ dirB/

Unison pregunta qué hacer cuando los archivos son diferentes, pero puede automatizar el proceso utilizando lo siguiente que acepta opciones predeterminadas (sin conflicto):

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ no hace preguntas en absoluto, y escribe en la salida cuántos archivos se ignoraron (porque estaban en conflicto).

 58
Author: alex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-06 01:11:19

También puedes probar bitpocket: https://github.com/sickill/bitpocket

 8
Author: saif,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-01 06:30:32

Prueba esto,

get-music:
 rsync -avzru --delete-excluded server:/media/10001/music/ /media/Incoming/music/

put-music:
 rsync -avzru --delete-excluded /media/Incoming/music/ server:/media/10001/music/

sync-music: get-music put-music

Acabo de probar esto y funcionó para mí. Estoy haciendo una sincronización de 2 vías entre Windows7 (usando cygwin con el paquete rsync instalado) y FreeNAS fileserver (FreeNAS se ejecuta en FreeBSD con el paquete rsync preinstalado).

 5
Author: Chris Collins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-06-02 07:00:05

Puede usar Osync: http://www.netpower.fr/osync , que se basa en rsync con propagación de eliminación inteligente. también tiene múltiples opciones como reanudar una ejecución detenida, eliminación suave y control de tiempo.

 5
Author: deajan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-18 14:44:14

Dado que la pregunta original también involucra un escritorio y un portátil y un ejemplo que involucra archivos de música (por lo tanto, probablemente esté usando una interfaz gráfica de usuario), también mencionaría uno de los mejores programas bidireccionales, multiplataforma, gratuitos y de código abierto hasta la fecha: FreeFileSync.

Está basado en GUI, muy rápido e intuitivo, viene con filtrado y muchas otras opciones, incluida la capacidad de conexión remota, para ver y administrar interactivamente "colisiones" (por ejemplo, archivos con marcas de tiempo similares) y para cambiar entre transferencia bidireccional, duplicación, etc.

 4
Author: Dario Fumagalli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-13 09:41:12

Puedes probar csync, es el motor de sincronización bajo el capó de owncloud.

 3
Author: marton78,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-02-01 09:34:12

Ahora estoy usando SparkleShare https://www.sparkleshare.org/

Funciona en mac, linux y windows.

 1
Author: mwm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-30 17:22:03

Sí, hay una solución más simple llamada Resilio Connect . Estoy seguro de que no es posible hacer una sincronización completa de 2 vías con rsync. Si agrega más máquinas, será aún más complicado. El problema con rsync es también que hay límites de CPU y disco, cálculos delta lentos en el archivo para archivos grandes, etc., pero la solución basada en peer-to-peer funcionará bien. También Resilio es multiplataforma con el soporte de SO más popular, incluido el móvil. Aquí hay un escrito discutiendo rsync alternativas.

 1
Author: Victoria,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-07 15:37:55

No estoy seguro de si funciona con dos sincronizaciones, pero para que funcione --delete también necesita agregar el parámetro rec recursive.

 0
Author: Boardy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-03-21 22:31:20