двунаправленная синхронизация с 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
Есть возможность использовать unison без установки его на сервере, см. Комментарии в этом ответе stackoverflow.com/a/2936711, который указывает на i3vi3v.wordpress.com/2013/01/09/…
Томас

-1

Что вам действительно нужно, так это Rclone . Rclone - это rsync для облачного хранилища (box, dropbox, nextcloud, ftp и т. Д.) И локального хранилища.


2
Как они установят и используют rclone для решения своей проблемы?
Джефф Шаллер

3
У rclone пока нет двунаправленной синхронизации.
Шон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.