Двухсторонняя синхронизация с 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
когда я делаю синхронизацию, он сначала получает все различия от сервера к локальному, а затем наоборот, отправляя все различия с локального на сервер.
Это работает очень хорошо, только если в будущем есть только обновления или новые файлы. Если есть удаления, это ничего не делает.
В rsync есть опции -delete и -delete-after, чтобы помочь выполнить то, что я хочу, но это не так, это не работает при двухсторонней синхронизации.
Если я хочу удалить файлы сервера на syn, когда локальные файлы были удалены, он работает, но если по какой-либо причине (объясняется после) у меня есть некоторые файлы, которые не находятся на сервере, но существуют локально, и они были удалены, я хочу локально удалить их, а не копировать сервер (как это бывает).
Вещь: у меня есть 3 машины в контексте:
- настольный
- ноутбук
- домашний сервер
Таким образом, иногда сервер будет иметь файлы, которые были удалены с помощью синхронизации с ноутбуком, например, а затем, когда я запускаю синхронизацию с моим рабочим столом (там, где все файлы удаленных серверов все еще существуют), я хочу, чтобы эти файлы были удалены и не копироваться на сервер.
Я предполагаю, что это возможно только с базой данных и отслеживанием операций: P
Любые более простые решения?
Спасибо.
Ответы
Ответ 1
Попробуйте Unison: http://www.cis.upenn.edu/~bcpierce/unison/
Синтаксис:
unison dirA/ dirB/
Unison спрашивает, что делать, когда файлы разные, но вы можете автоматизировать процесс, используя следующие, которые принимают параметры по умолчанию (без конфликтов):
unison -auto dirA/ dirB/
unison -batch dirA/ dirB/
вообще не задает никаких вопросов и записывает на вывод, сколько файлов было проигнорировано (поскольку они конфликтуют).
Ответ 2
Вы также можете попробовать bitpocket: https://github.com/sickill/bitpocket
Ответ 3
Попробуйте это,
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).
Ответ 4
Вы можете использовать Osync: http://www.netpower.fr/osync, который основан на rsync с интеллектуальным распространением делеции. он также имеет несколько вариантов, таких как возобновление выполнения остановки, мягкое удаление и контроль времени.
Ответ 5
Поскольку первоначальный вопрос также касается настольного компьютера и ноутбука и примера с музыкальными файлами (следовательно, он, вероятно, использует графический интерфейс), я бы также упомянул одну из лучших на сегодняшний день двунаправленных, мультиплатформенных, бесплатных и программ с открытым исходным кодом: FreeFileSync,
Он основан на графическом интерфейсе пользователя, очень быстрый и интуитивно понятный, поставляется с фильтрацией и многими другими опциями, включая возможность удаленного подключения, просмотра и интерактивного управления "коллизиями" (например, файлы с одинаковыми временными метками) и переключения между двунаправленной передачей, зеркалированием и скоро.
Ответ 6
Вы можете попробовать csync, это механизм синхронизации под капотом owncloud.
Ответ 7
Теперь я использую SparkleShare https://www.sparkleshare.org/
работает на Mac, Linux и Windows.
Ответ 8
Я не уверен, работает ли он с двумя синхронизациями, но для работы --delete вам также нужно добавить параметр --recursive.
Ответ 9
Rclone - это то, что вы ищете. Rclone ("rsync для облачного хранилища") - это программа командной строки для синхронизации файлов и каталогов между различными поставщиками облачного хранилища, включая локальные файловые системы. Ранее Rclone был известен как Swiftsync и был доступен с 2013 года.