Rsync через SSH путь с пробелами не работает с кавычками

Я могу успешно RSYNC через SSH, пока пути не имеют пробелов в них.

Когда путь имеет пробелы, он не работает. Я пробовал косые черты, кавычки и двойные кавычки.

Когда я использую косые черты, вывод показывает, что это успешно, но я не вижу переданных файлов.

rsync -avz /path\ with\ spaces/ user@remotelocation:/media/another\ path\ with/spaces/

Когда я использую одинарные или двойные кавычки, мне сообщают, что после ввода пароля мне отказано в разрешении

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Что я могу сделать?

Спасибо.

3 ответа

Решение

Расширяя ответ rzr с примером кода и ссылками, просто добавьте -s помечайте, заключайте в кавычки пути и не беспокойтесь о пробелах в удаленном пути:

rsync -avzs '/path with spaces/' 'user@remotelocation:/media/another path with/spaces/'

Для справки, параметры, указанные в ОП:

  • -a, режим архива, равно -rlptgoD (нет -H,-A,-X)
    • Включает в себя:
    • -r, --recursive, рекурсивно в каталоги
    • -l, --links, скопировать символические ссылки как символические ссылки
    • -p, --perms, сохранить права
    • -t, --times, сохранить время модификации
    • -g, --group, сохранить группу
    • -o, --owner, сохранить владельца (только для суперпользователя)
    • -устройства, сохранить файлы устройств (только для суперпользователя)
    • -специальные, сохраняйте специальные файлы
  • -v, --verbose, увеличить многословие
  • -z, --compress, сжатие данных файла во время передачи

Необходим дополнительный параметр:

  • -s, --protect-args, без разделения пробелов, только символы подстановки

Вам нужно экранировать пробелы как в локальной, так и в удаленной оболочке. Попробуй это:

rsync -avz '/path with spaces/' 'user@remotelocation:/media/another\ path\ with/spaces/'

Источник, /path with spaces/ в локальной оболочке можно выйти только через одинарные кавычки, т.е. '/path with spaces/',

С другой стороны, в случае места назначения локальная оболочка экранируется путем помещения одинарных кавычек, а пробелы в удаленной оболочке экранируются с помощью escape-символа (\) перед пробелами.

Посмотрите на опцию rsync –protect-args (-s), дополнительные косые черты не нужны

Другие вопросы по тегам