RSync: Как мне синхронизировать в обоих направлениях? - PullRequest
58 голосов
/ 21 октября 2009

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

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

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

Ответы [ 6 ]

59 голосов
/ 21 октября 2009

Просто запустите его дважды, с «более новым» режимом (флаг -u или --update), плюс -t (для копирования времени изменения файла), -r (для рекурсивных папок) и -v (для подробного вывода на экран, чтобы увидеть что он делает):

rsync -rtuv /path/to/dir_a/* /path/to/dir_b
rsync -rtuv /path/to/dir_b/* /path/to/dir_a

Это не будет обрабатывать удаления, но я не уверен, что есть хорошее решение этой проблемы только с периодической синхронизацией.

53 голосов
/ 21 октября 2009

Знаете ли вы Синхронизатор файлов Unison ?

Unison - инструмент синхронизации файлов для Unix и Windows. Это позволяет два копии коллекции файлов и каталоги для хранения на разных хосты (или разные диски на одном и том же хост), модифицируется отдельно, а затем доведены до даты путем распространения изменения в каждой реплике к другой. ...

Обратите внимание, что оно устойчиво к отказам:

Унисон устойчив к неудачам. это Осторожно, чтобы оставить реплики и его собственные частные структуры в разумном состояние в любое время, даже в случае ненормальное завершение или сбой связи.

6 голосов
/ 19 января 2013

Спасибо 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
1 голос
/ 16 марта 2013

Использование rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

например:

rsync -pogtEtvr --progress --bwlimit=2000 xxx-files different-stuff

Синхронизирует ххх-файлы с разными штуками / ххх-файлами. Если разные штуки / ххх-файлами не существует, он создаст их, т.е. скопирует.

-pogtEtv - просто набор опций для сохранения метаданных файла, плюс v - подробный и r - рекурсивный

--progress - показывать ход синхронизации в режиме реального времени - супер полезно, если вы копируете большие файлы

--bwlimit=2000 - устанавливает максимальную скорость копирования / синхронизации (bw = пропускная способность)

P.S. rsync критически важен, когда вы работаете по сети, в случае локальной машины вы можете использовать такие команды, как cp .

Удачи!

0 голосов
/ 19 февраля 2019

Что вам нужно, это Rclone . Rclone («rsync для облачного хранилища») - это программа Linux для командной строки, предназначенная для синхронизации файлов и каталогов между различными поставщиками облачного хранилища (box, dropbox, ftp и т. Д.) И локальными файловыми системами. Rlone поддерживает только зеркальную синхронизацию.

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

FreFileSync gui

0 голосов
/ 10 августа 2018

Я использую rsync с inotifywait. При изменении любого файла будет выполняться rsync.

inotifywait -m --exclude "$_LOG_FILE" -r -e create,delete,delete_self,modify,moved_to --format "%w%f" "$folder"

Вам нужно запустить inotifywait на обоих хостах. Пожалуйста, проверьте пример inotifywait

...