У меня есть папка 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, которые помогают выполнить то, что я хочу, но дело в том, что это не работает с двухсторонней синхронизацией.
Если я хочу удалить файлы сервера при синхронизации, когда локальные файлы были удалены, это работает, но если по какой-то причине (объяснено ниже) у меня есть файлы, которых нет на сервере, но существуют локально, и они были удалены, Я хочу удалить их локально, а не копировать сервер (как это бывает).
Дело в том, что у меня есть 3 машины в контексте:
- рабочий стол
- ноутбук
- домашний сервер
Таким образом, иногда на сервере будут файлы, которые были удалены с помощью синхронизации записной книжки, например, а затем, когда я запускаю синхронизацию с моим рабочим столом (где удаленные файлы сервера все еще существуют), я хочу, чтобы эти файлы были удалены, а не снова скопировал на сервер.
Я думаю, это возможно только с базой данных и отслеживанием операций: P
Есть более простые решения? Спасибо.
Ответы:
Попробуйте Unison: 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
источник
Вы можете использовать Osync: http://www.netpower.fr/osync , который основан на rsync с интеллектуальным распространением удалений. у него также есть несколько вариантов, таких как возобновление остановленного выполнения, мягкое удаление и контроль времени.
источник
Поскольку исходный вопрос также касается настольного компьютера и ноутбука и примера с музыкальными файлами (следовательно, он, вероятно, использует графический интерфейс), я бы также упомянул одну из лучших двунаправленных, многоплатформенных, бесплатных программ с открытым исходным кодом на сегодняшний день: FreeFileSync .
Он основан на графическом интерфейсе, очень быстрый и интуитивно понятный, поставляется с фильтрацией и множеством других опций, включая возможность удаленного подключения, просмотра и интерактивного управления «коллизиями» (например, файлов с похожими временными метками) и переключения между двунаправленной передачей, зеркалированием и скоро.
источник
Попробуй это,
Я просто тестирую это, и у меня это сработало. Я выполняю двустороннюю синхронизацию между Windows7 (с использованием cygwin с установленным пакетом rsync) и файловым сервером FreeNAS (FreeNAS работает на FreeBSD с предустановленным пакетом rsync).
источник
-u
пропускает файлы более новые в месте назначения, но rsync не имеет возможности отслеживать возраст удаления, поэтому как этот сценарий может различать, когда локальный файл является новым (и должен быть сохранен) или старым (и должен быть удален) ? Или я недопонимаю?--delete-excluded
какие-либо файлы, существующие в каталогах назначения, но не в исходных каталогах? Я думал, вам нужно определить--exclude=<filename>
, не удалит ли rsync только эти исключения? Или rsync обрабатывает все файлы каталогов, не являющихся исходными, как «исключаемые»?--delete-excluded
запускается с сервером в качестве источника первым: файлы, добавленные локально, будут удалены во время этого запуска (тогда как файлы, добавленные на сервер , копируются в локальную цель). Единственные локальные файлы, синхронизируемые с сервером, - это файлы, которые также существуют на сервере и были изменены локально (позже, чем серверные версии), что маловероятно в сценарии OP. Как вы намекаете, мне кажется, что настоящая двусторонняя синхронизация невозможнаrsync
, потому что требуется сохранение состояния между запусками.Вы можете попробовать csync , это движок синхронизации под капотом owncloud .
источник
Сейчас я использую SparkleShare https://www.sparkleshare.org/
работает на Mac, Linux и Windows.
источник
Я не уверен, работает ли это с синхронизацией двух, но для работы --delete вам также необходимо добавить параметр --recursive.
источник
--recurse
является-r
, что ФП в использовании (встроенный в группе сжатых опций-avzru
).Вы можете использовать cloudync, чтобы синхронизировать папку с пультом дистанционного управления:
Если удаленным является NFS, вы можете использовать:
источник
Rclone - это то, что вы ищете. Rclone («rsync для облачного хранилища») - это программа командной строки для синхронизации файлов и каталогов с разными поставщиками облачных хранилищ, включая локальные файловые системы. Rclone ранее назывался Swiftsync и доступен с 2013 года.
источник