Sincronização de duas vias com o rsync

Tenho uma pasta a/e uma pasta remota a/. Eu agora dirijo algo assim em um 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

Quando faço sincronia-Música, primeiro recebe todas as diffs de servidor para local e depois o oposto, enviando todas as diffs de local para servidor.

Isto só funciona muito bem se houver apenas actualizações ou novos ficheiros no futuro. Se houver deleções, não faz nada.

no rsync existem opções --delete e -- delete-after para ajudar a realizar o que eu quero, mas o problema é que não funciona numa sincronização de dois sentidos.

Se eu quiser apagar ficheiros do servidor num syn, quando os ficheiros locais tiverem sido apagados, funciona, mas se, por alguma razão (explicada depois) eu tiver alguns ficheiros que não estão no servidor, mas existem localmente e foram apagados, quero removê-los localmente e não copiados pelo servidor (como acontece).

O problema é que tenho 3 máquinas no contexto:
  1. ecrã
  2. notebook
  3. servidor doméstico
Então, às vezes ... , o servidor terá arquivos que foram apagados com uma sincronização de notebook, por exemplo, e então, quando eu executar uma sincronização com o meu desktop (onde os arquivos do servidor apagados ainda existem) Eu quero que esses arquivos sejam apagados e não sejam copiados novamente para o servidor.

acho que isto só é possível com uma base de dados e um registo das operações: P

Há soluções mais simples? Obrigado.

Author: menjaraz, 2010-05-30

9 answers

Tenta em uníssono: http://www.cis.upenn.edu / ~bcpierce/unison/

Sintaxe: unison dirA/ dirB/

Unison pergunta O que fazer quando os ficheiros são diferentes, mas você pode automatizar o processo usando o seguinte que aceita opções predefinidas (não conflitantes):

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ não faz nenhuma pergunta, e escreve ao output quantos arquivos foram ignorados (porque eles entraram em conflito).

 58
Author: alex, 2014-02-06 01:11:19

Também podes tentar bitpocket: https://github.com/sickill/bitpocket

 8
Author: saif, 2012-01-01 06:30:32
Tenta isto.
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
Só testei isto e funcionou comigo. Estou a fazer uma sincronização de 2 vias entre o Windows7 (usando o cygwin com o pacote rsync instalado) e o servidor de ficheiros FreeNAS (o FreeNAS funciona no FreeBSD com o pacote rsync pré-instalado).
 5
Author: Chris Collins, 2012-06-02 07:00:05

Pode usar Osync: http://www.netpower.fr/osync , que é baseado em rsync com propagação de deleção inteligente. ele também tem várias opções, como retomar uma execução interrompida, deleção suave, e controle de tempo.

 5
Author: deajan, 2013-08-18 14:44:14

Uma vez que a questão original também envolve um desktop e laptop e exemplo envolvendo arquivos de música (daí ele provavelmente está usando uma GUI), eu também mencionaria um dos melhores programas bidirecionais, multi-plataforma, livre e de código aberto até à data: FreeFileSync.

É baseado em GUI, muito rápido e intuitivo, vem com filtragem e muitas outras opções, incluindo a capacidade de conexão remota, para ver e gerenciar interativamente "colisões" (em exemplo, arquivos com semelhantes a transferência bidireccional, espelhamento e assim por diante.

 4
Author: Dario Fumagalli, 2014-03-13 09:41:12

Você poderia tentar csync , é o motor de sincronização sob o capô de owncloud .

 3
Author: marton78, 2013-02-01 09:34:12
Estou a usar SparkleShare. https://www.sparkleshare.org/

Funciona no mac, linux e windows.

 1
Author: mwm, 2016-09-30 17:22:03

Sim, existe uma solução mais simples chamada Resilio Connect . Estou certo de que não é possível fazer uma sincronização completa de 2 vias com o rsync. Se você adicionar mais máquinas será ainda mais complicado. O problema com o rsync também é que existem limites de CPU e disco, cálculos delta lentos em arquivo para grandes arquivos etc, mas a solução baseada peer-to-peer vai funcionar bem. Também Resilio é multi-plataforma com suporte operacional mais popular, incluindo móvel. Aqui está um artigo discutindo rsync alternativas.

 1
Author: Victoria, 2018-08-07 15:37:55

Não sei se funciona com dois sincronismos, mas para o -- delete funcionar também é necessário adicionar o parâmetro -- recursive.

 0
Author: Boardy, 2012-03-21 22:31:20