sincronização bidirecional com o rsync


11

Estou tentando configurar a sincronização bidirecional ou bidirecional com o rsync. No meu caso, só preciso excluir os arquivos ao sincronizar de B para A. Então, pensei em executar o rsync duas vezes da seguinte maneira:

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

Esse problema com esta solução é que, quando executo o rsync (B-> A), que seria logo após executar o rsync (AB), qualquer novo arquivo criado entre a sincronização também será removido.

Existe uma maneira de especificar um carimbo de data / hora como condição para que ele exclua o arquivo apenas se ele tiver sido criado antes dessa data / hora.

Atualizada:

Entendo que existe uma solução uníssona, mas é necessário instalar o problema com uníssono nas duas extremidades. Estou sincronizando com um servidor remoto e não consigo instalar uníssono na extremidade remota.


Há uma questão muito semelhante com mais algumas respostas aqui: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Thomas

Respostas:


4

Você pode tentar o osync, projetado exatamente para esta tarefa. Certa vez, configurei uma sequência complexa de comandos rsync para fazer o trabalho, mas agora uso o osync.

https://github.com/deajan/osync

Ele usa o rsync internamente, portanto deve ser adequado para qualquer situação em que você possa usar o rsync.


1
Obrigado, Mark. Eu estava prestes a responder minha própria pergunta. Eu encontrei um script muito semelhante chamado bsync ( github.com/dooblem/bsync ) basicamente usa diff para descobrir o que precisa ser sincronizado. Como não estou esperando nenhum conflito na sincronização, também modifico um pouco esse script para que seja executado silenciosamente quando executado com um trabalho cron.
Raza

7

rsyncé a ferramenta errada para esta tarefa, exatamente pelos motivos que você encontrou. Em vez disso, considere usar unison:

unison A/ B/

Na primeira vez em que você executar isso, ele identificará os arquivos que estão exclusivamente dentro Ae os que estão dentro B. Ele também sinalizará aqueles que estão nos dois lugares e solicitará que você identifique qual deve ser substituído.

Na próxima vez em que você executar isso, ele copiará as alterações de Apara Be também Bpara A, sinalizando todos os arquivos que foram alterados nos dois locais para resolução 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

Há vários sinalizadores úteis disponíveis para unisonajudar a automatizar o processo, definindo suposições e reduzindo o número de perguntas que você faz durante a sincronização.


3
Eu vi uma solução uníssona, mas o problema é que sou obrigado a instalar nas duas extremidades. Estou sincronizando com um controle remoto e não consigo instalar o uníssono na extremidade remota.
Raza

1
Não ajuda o OP, mas eu estava procurando por uníssono . Eu vejo que existem pacotes Debian e ele suporta o transporte ssh.
Ted

1
Existem possibilidades de usar o uníssono sem instalá-lo no servidor. Consulte os comentários nesta resposta stackoverflow.com/a/2936711, que aponta para i3vi3v.wordpress.com/2013/01/09/…
Thomas

-1

O que você realmente precisa é do Rclone . Rclone é rsync para armazenamento em nuvem (caixa, caixa de depósito, nextcloud, ftp etc.) e armazenamento local.


2
Como eles instalariam e usariam o rclone para resolver seu problema?
Jeff Schaller

3
O rclone ainda não possui sincronização bidirecional.
sean
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.