RSync: Как синхронизировать в обоих направлениях?
Я хочу использовать rsync для синхронизации двух каталогов в обоих направлениях.
Я имею в виду синхронизацию в классическом смысле
( не, как это понимается в руководствах rsync):
Я хочу обновить каталоги в обоих направлениях,
в зависимости от того, из какого из них новее.
Можно ли это сделать с помощью rsync (предпочтительнее на Linux-пути)?
Если нет, то какие существуют другие решения?
Ответы
Ответ 1
Просто запустите его дважды, с "более новым" режимом (-u или --update flag) плюс -t (чтобы скопировать время изменения файла), -r (для рекурсивных папок) и -v (для подробного вывода, чтобы увидеть что он делает):
rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a
Это не будет обрабатывать удаления, но я не уверен, что есть хорошее решение этой проблемы с периодической синхронизацией.
Ответ 2
Знаете ли вы Unison File Synchronizer?
Unison - это инструмент синхронизации файлов для Unix и Windows. Это позволяет два реплики коллекции файлов и каталоги, которые должны храниться на разных хосты (или разные диски на одном и том же хост), модифицированный отдельно, а затем обновляется, распространяя изменения в каждой реплике на другую....
Обратите также внимание на то, что он устойчив к сбою:
Unison устойчив к сбою. это осторожно оставить реплики и собственные частные структуры в разумных постоянно, даже в случае ненормальное завершение или сбои связи.
Ответ 3
Спасибо jsight
rsync -urv --progress dir_a dir_b && rsync -urv --progress dir_b dir_a
Это приведет к тому, что вторая синхронизация произойдет сразу же после завершения 1-й синхронизации. Если структура каталогов огромна, это сэкономит время, так как не нужно сидеть перед ПК. Если структура огромна, удалите подробный и прогрессивный материал.
rsync -ur dir_a dir_b && rsync -ur dir_b dir_a
Ответ 4
Используйте rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir
например:
rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff
Будет синхронизировать xxx файлы с файлами other-stuff/xxx. Если файлов other-stuff/xxx не существует, они создадут его, т.е. скопируют его.
-pogtEtv
- просто набор параметров для сохранения метаданных файла, а также v - verbose и r - рекурсивный
--progress
- показывает ход синхронизации в реальном времени - супер полезно, если вы копируете большие файлы
--bwlimit=2000
- устанавливает максимальную скорость копирования/синхронизации (bw = ширина полосы)
P.S. rsync имеет решающее значение, когда вы работаете над сетью в случае локальной машины, вы можете использовать команды типа cp.
Удачи!
Ответ 5
Я использую rsync
с inotifywait
. Когда вы изменяете любой файл, rsync
будет выполнен.
inotifywait -m --exclude "$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format "%w%f" "$folder"
Вам нужно запустить inotifywait
на обоих хостах. Пожалуйста, проверьте пример inotifywait
Ответ 6
Что вам нужно, это Rclone. Rclone ("rsync для облачного хранилища") - это программа Linux для командной строки, предназначенная для синхронизации файлов и каталогов между различными поставщиками облачного хранилища (box, dropbox, ftp и т.д.) И локальными файловыми системами. Rlone поддерживает только зеркальную синхронизацию.
Другим более графическим решением, которое включает синхронизацию в реальном времени, было бы использование FreeFileSync, в состав которого входит программа RealTimeSync. FreefileSync поддерживает двустороннюю синхронизацию, которая включает обработку удалений.
![FreFileSync gui]()
Ответ 7
если вы хотите синхронизировать в обоих направлениях, а также активировать удаление файлов
используйте следующие команды
rsync -u -r --delete dir_a dir_b
rsync -u -r --delete dir_b dir_a