Позволяет ли Rsync синхронизировать файлы в обоих направлениях?

25

Я зарезервировал веб-сервер linux, используя rsync с cygwin. Теперь у меня есть идеальная копия сервера на моем ноутбуке с Windows. Если я удаляю или изменяю файл на своем ноутбуке и снова запускаю rsync с помощью cygwin, удалит ли он / обновит тот же файл на сервере? У меня сложилось впечатление, что если я удаляю / изменяю на сервере и запускаю rsync на своем ноутбуке, он будет удалять / изменять локальный файл на моем ноутбуке, но работает ли это в обратном порядке?

Дэн Гастингс
источник
12
Это не ответ на ваш вопрос, но вы должны посмотреть unison. Это инструмент синхронизации, который сохраняет состояние файла на обеих копиях и, таким образом, позволяет осуществлять двунаправленную синхронизацию. Существует также пакет Cygwin.
Дубу

Ответы:

29

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

Синтаксис команды Rsync следующий:

rsync [OPTION...] SRC... [DEST]

Обратите внимание, что вы указываете синхронизацию от источника к месту назначения. Источником и получателем может быть любой локальный или удаленный путь.

Например, если вы хотите скопировать файлы с вашего сервера на ноутбук, вы делаете:

rsync [OPTION...] <server-path> <laptop-path>

Для синхронизации в обратном направлении вы делаете:

rsync [OPTION...] <laptop-path> <server-path>

Итак, чтобы ответить на ваш вопрос: это зависит от того, как вы выполняете rsync.

Если вы хотите, чтобы файлы были удалены в месте назначения, вам нужно использовать --deleteопцию. Но будьте осторожны с этим, потому что, если вы допустите ошибку при указании вашего источника, то в конечном итоге вы удалите все в своем месте назначения. Безопаснее --deleteсначала проверить свою синхронизацию без опции, а когда вы будете довольны тем, как она работает, вы можете добавить --deleteопцию.

Как предложено masegaloeh в комментариях ниже, -nили --dry-runопция может также использоваться для проверки rsyncповедения команды.

grekasius
источник
9
Дополнительное примечание: для тестирования поведения rsync вы можете использовать параметр -nили --dry-run, чтобы вы знали, какой файл будет удален и изменен
masegaloeh
1

Инструмент обертки написанный в Python3 называется , bsyncкоторый оборачивает findи rsyncкоманда упрощает задачу. Репозиторий Github: https://github.com/dooblem/bsync

Не пугайтесь, когда он на github (то есть, вы думаете, что для использования инструмента вы должны быть программистом).

biocyberman
источник
-1

рассмотрите возможность использования --delete-after, а не --delete, это гарантирует, что принимающая сторона удалит файлы после передачи, а не до.

Моти
источник
Я полагаю, что отрицательные результаты заключаются в том, что ОП не пытается rsyncничего удалить. Он удаляет вещи самостоятельно. Сказав это, полезный совет для rsync'ing в целом. Спасибо.
Harperville