двонаправлена ​​синхронізація з rsync


11

Я намагаюся налаштувати двосторонню або двосторонню синхронізацію з rsync. У моєму випадку мені потрібно видалити файли лише під час синхронізації з B до A. Отже, я думав запустити rsync двічі, як слід:

rsync -rtuv ./A/ ./B/
rsync -rtuv --delete ./B/ ./A/

Ця проблема з цим рішенням полягає в тому, що коли я запускаю rsync (B-> A), що було б відразу після запуску rsync (AB), будь-який новий файл, створений між синхронізацією, також буде видалений.

Чи є спосіб я вказати марку часу як умову, що він видаляє файл лише в тому випадку, якщо він був створений до цієї дати / часу.

Оновлено:

Я розумію, що існує рішення унісон, але проблема з унісоном потрібно встановлювати на обох кінцях. Я синхронізую з віддаленим сервером і не можу встановити унисон на віддаленому кінці.


Тут є дуже схоже запитання, де ще кілька відповідей: stackoverflow.com/questions/2936627/two-way-sync-with-rsync
Томас

Відповіді:


4

Ви можете спробувати osync, який призначений саме для цього завдання. Колись я створив складну послідовність команд rsync, щоб виконати цю роботу, але зараз використовую osync.

https://github.com/deajan/osync

Він використовує rsync внутрішньо, тому він повинен бути придатним для будь-якої ситуації, коли ви можете використовувати rsync.


1
Спасибі, Марку. Я збирався відповісти на власне запитання. Я знайшов дуже схожий сценарій під назвою bsync ( github.com/dooblem/bsync ), в основному він використовує diff, щоб зрозуміти, що потрібно синхронізувати. Оскільки я не сподіваюся на будь-які конфлікти в синхронізації, я також трохи модифікую цей сценарій, щоб він запускався мовчки, коли працює з завданням cron.
Раза

7

rsyncє неправильним інструментом для виконання цього завдання з саме тих причин, з якими ви стикалися. Замість цього, подумайте про використання unison:

unison A/ B/

Перший раз, коли ви запускаєте це, він визначає унікальні файли та файли A, які є унікальними B. Він також позначить ті, що знаходяться в обох місцях, і попросить вас визначити, що слід перезаписати.

Наступного разу, коли ви запустите це, він скопіює зміни з Aу, Bа також Bу A, позначивши всі файли, які були змінені в обох місцях для ручного вирішення.

mkdir A B
date > A/date
who > B/who
unison A/ B/
# Lots of output from unison, showing synchronisation

ls A
date    who
ls B
date    who

date > A/date
unison A/ B/
# Lots of output from unison, showing synchronisation

Існує ряд корисних прапорів, unisonякі допомагають автоматизувати процес, визначаючи припущення та тим самим зменшуючи кількість питань, які вам задають під час синхронізації.


3
Я бачив рішення унісон, але проблема з цим полягає в тому, що мене потрібно встановити на обох кінцях. Я синхронізую з віддаленим і не можу встановити унісон на віддаленому кінці.
Раза

1
Це не допомагає ОП, але я шукав унісон . Я бачу, що є пакети Debian і вони підтримують ssh транспорт.
Тед

1
Є можливості для використання в унісон , без встановлення його на сервері, дивіться коментарі в цій відповіді stackoverflow.com/a/2936711 , який вказує на i3vi3v.wordpress.com/2013/01/09 / ...
Томас

-1

Що вам дійсно потрібно, це Rclone . Rclone - rsync для хмарного зберігання (коробка, папка, nextcloud, ftp тощо) та локального зберігання.


2
Як би вони встановили та використовували rclone для вирішення своєї проблеми?
Джефф Шаллер

3
rclone ще не має двонаправленої синхронізації.
sean
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.