Двухсторонняя синхронизация с rsync

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

Есть ли более простые решения? Спасибо.

84 голоса | спросил mwm 30 Mayam10 2010, 01:16:35

8 ответов


0

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

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

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

unison -auto dirA/ dirB/

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

ответил alex 30 Mayam10 2010, 01:50:22
0

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

ответил saif 1 Jam1000000amSun, 01 Jan 2012 10:30:32 +040012 2012, 10:30:32
0

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

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).

ответил Chris Collins 2 J0000006Europe/Moscow 2012, 04:57:34
0

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

ответил Orsiris de Jong 18 PM00000060000001431 2013, 18:44:14
0

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

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

ответил Dario Fumagalli 13 MarpmThu, 13 Mar 2014 13:41:12 +04002014-03-13T13:41:12+04:0001 2014, 13:41:12
0

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

ответил marton78 1 FebruaryEurope/MoscowbFri, 01 Feb 2013 13:34:12 +0400000000pmFri, 01 Feb 2013 13:34:12 +040013 2013, 13:34:12
0

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

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

ответил mwm 30 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 30 Sep 2016 20:22:03 +0300 2016, 20:22:03
0

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

ответил Boardy 22 MaramThu, 22 Mar 2012 02:31:20 +04002012-03-22T02:31:20+04:0002 2012, 02:31:20

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132