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



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


когда я делаю sync-music, он сначала получает все различия от сервера к локальному, а затем наоборот, отправляя все различия от локального к серверу.



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



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



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



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




  1. рабочий стол

  2. ноутбук

  3. home-server


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



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



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

1088   9  

9 ответов:

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

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

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

unison -auto dirA/ dirB/

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

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

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

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

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

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

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

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

теперь я использую SparkleShare https://www.sparkleshare.org/

работает на mac, linux и windows.

Да, есть более простое решение под названием Resilio Connect . Я уверен, что невозможно сделать полную двустороннюю синхронизацию с rsync. Если вы добавите больше машин, это будет еще сложнее. Проблема с rsync также в том, что есть границы процессора и диска, медленные вычисления дельты в файле для больших файлов и т. д., Но одноранговое решение будет работать нормально. Также Resilio является кроссплатформенной с самой популярной поддержкой ОС, в том числе мобильной. Вот написать до обсуждения rsync альтернативы.

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

Comments

    Ничего не найдено.