rsync: как реплицировать полную структуру каталогов

#rsync

#rsync

Вопрос:

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

Я использую ssh с файлами сертификатов, поэтому вход в систему вручную не требуется.

Если я использую его следующим образом, он копирует file.crt, но не создает родительские каталоги:

 rsync -ave ssh user1@10.10.10.10:/opt/dir/data/file.crt /home/user1/
  

Если я попытаюсь использовать параметр -R —recursive, он завершается ошибкой, приведенной ниже:

  rsync -ave --recurisive ssh user1@10.10.10.10:/opt/dir/data/file.crt /home/user1/
  

или с помощью -R

  rsync -aveR ssh user1@10.10.10.10:/opt/dir/data/file.crt /home/user1/
  

Неожиданный удаленный аргумент: user1@10.10.10.10:/opt/dir/data/file.crt

ошибка rsync: ошибка синтаксиса или использования (код 1) в main.c(1361) [отправитель = 3.1.2]

Заранее спасибо за любую помощь

Ответ №1:

Я вижу здесь две проблемы: во-первых, параметры -R и --recurisive не совпадают (и «рекурсивный» написан с ошибкой). -R это краткая форма --relative , которая вам нужна (она включает полный путь к источнику). Существует --recursive опция (краткая форма: -r ), но это подразумевается -a , а также здесь неуместно, потому что вы копируете один файл, а не каталог.

Во-вторых, когда вы добавляете новую опцию, вы помещаете ее между -ave и ssh , но ssh она есть в качестве параметра для -e опции, поэтому она должна следовать сразу после -e . То, как вы это пишете, rsync интерпретирует -R или что-то еще в качестве параметра -e и ssh как совершенно отдельный аргумент, и поэтому полностью запутывается.

Но вам все равно не нужно -e ssh — это почти всегда значение по умолчанию, поэтому вы должны иметь возможность просто отключить его. Поэтому попробуйте это:

 rsync -avR user1@10.10.10.10:/opt/dir/data/file.crt /home/user1/
  

Если это не сработает, попробуйте это вместо:

 rsync -avR -e ssh user1@10.10.10.10:/opt/dir/data/file.crt /home/user1/