Подтвердить что ты не робот

RSync: Как синхронизировать в обоих направлениях?

Я хочу использовать rsync для синхронизации двух каталогов в обоих направлениях.

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

Можно ли это сделать с помощью rsync (предпочтительнее на Linux-пути)?
Если нет, то какие существуют другие решения?

4b9b3361

Ответ 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