Двухсторонняя синхронизация с rsync - PullRequest
89 голосов
/ 30 мая 2010

У меня есть папка / и удаленная папка /. Теперь я запускаю что-то вроде этого на 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

когда я создаю синхронизирующую музыку, он сначала получает все различия с сервера на локальный, а затем наоборот, отправляя все различия с локального на сервер.

Это работает очень хорошо, только если в будущем будут только обновления или новые файлы. Если есть удаления, он ничего не делает.

В rsync есть опции --delete и --delete-after, помогающие выполнить то, что я хочу, но дело в том, что он не работает при двухсторонней синхронизации.

Если я хочу удалить серверные файлы в синхронизации, когда локальные файлы были удалены, это работает, но если по какой-то причине (объяснено после) у меня есть некоторые файлы, которых нет на сервере, но они существуют локально, и они были удалены, я хочу локально удалить их, а не скопировать сервер (как это происходит).

Дело в том, что у меня есть 3 машины в контексте:

  1. настольный
  2. ноутбук
  3. домашний сервер

Так, иногда на сервере могут быть файлы, которые были удалены с синхронизацией с ноутбуком, например, и затем, когда я запускаю синхронизацию с моим рабочим столом (на котором все еще существуют удаленные файлы сервера), я хочу, чтобы эти файлы были удалены больше не копировать на сервер.

Полагаю, это возможно только с базой данных и отслеживанием операций: P

Какие-нибудь более простые решения? Спасибо.

Ответы [ 9 ]

59 голосов
/ 30 мая 2010

Попробуйте Unison: http://www.cis.upenn.edu/~bcpierce/unison/

Синтаксис: unison dirA/ dirB/

Unison спрашивает, что делать, если файлы различаются, но вы можете автоматизировать процесс, используя следующие параметры, которые принимают параметры по умолчанию (не конфликтующие):

unison -auto dirA/ dirB/

unison -batch dirA/ dirB/ вообще не задает вопросов и выводит, сколько файлов было проигнорировано (потому что они конфликтовали).

8 голосов
/ 01 января 2012

Вы также можете попробовать битовый карман: https://github.com/sickill/bitpocket

6 голосов
/ 02 июня 2012

Попробуйте это,

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

Я просто проверил это, и это сработало для меня. Я делаю двустороннюю синхронизацию между Windows7 (используя cygwin с установленным пакетом rsync) и файловым сервером FreeNAS (FreeNAS работает на FreeBSD с предварительно установленным пакетом rsync).

5 голосов
/ 18 августа 2013

Вы можете использовать Osync: http://www.netpower.fr/osync, основанный на rsync с интеллектуальным распространением удаления. он также имеет несколько параметров, таких как возобновление приостановленного выполнения, мягкое удаление и контроль времени.

4 голосов
/ 13 марта 2014

Поскольку первоначальный вопрос также касается настольного компьютера и ноутбука и примера с музыкальными файлами (следовательно, он, вероятно, использует графический интерфейс), я бы также упомянул одну из лучших двунаправленных, многоплатформенных, бесплатных и программ с открытым исходным кодом для дата: FreeFileSync .

Он основан на графическом интерфейсе пользователя, очень быстр и интуитивно понятен, поставляется с фильтрацией и многими другими опциями, включая возможность удаленного подключения, просмотра и интерактивного управления «коллизиями» (например, файлами с похожими временными метками) и переключения между двунаправленной передачей. , зеркалирование и пр.

3 голосов
/ 01 февраля 2013

Вы можете попробовать csync , это механизм синхронизации под капотом owncloud .

1 голос
/ 30 сентября 2016

Я сейчас использую SparkleShare https://www.sparkleshare.org/

работает на Mac, Linux и Windows.

0 голосов
/ 19 февраля 2019

Rclone - это то, что вы ищете. Rclone («rsync для облачного хранилища») - это программа командной строки для синхронизации файлов и каталогов между различными поставщиками облачного хранилища, включая локальные файловые системы. Ранее Rclone был известен как Swiftsync и доступен с 2013 года.

0 голосов
/ 22 марта 2012

Я не уверен, работает ли он с двумя синхронизаторами, но для работы --delete вам также необходимо добавить параметр --recursive.

...