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

StackOverflow https://stackoverflow.com/questions/1602324

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

Просто запустите его дважды, используя " более новый " режим (-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

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

Другие советы

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

  

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

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

  

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

Спасибо jsight

rsync -urv --progress dir_a dir_b && rsync -urv  --progress dir_b dir_a

Это приведет к тому, что вторая синхронизация произойдет сразу после окончания первой синхронизации. В случае, если структура каталогов огромна, это сэкономит время, так как не нужно сидеть перед компьютером. Если структура огромная, удалите подробности и прогресс

rsync -ur dir_a dir_b && rsync -ur dir_b dir_a

Используйте rsync <OPTIONS> [hostname:]source-dir [hostname:]dest-dir

например:

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

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

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

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

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

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

Удачи!

Я использую rsync с inotifywait. Когда вы измените какой-либо файл, будет выполнено <=>.

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

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

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

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

 FreFileSync gui

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top