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


17

Я могу успешно 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/'

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

Спасибо.

Ответы:


12

Расширяя ответ 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, без разделения пробелов, только символы подстановки

13

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

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

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

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


3
Просто чтобы подчеркнуть - вам нужны ОБА и кавычки.
Шридхар Сарнобат

2

посмотрите на параметр rsync –protect-args (-s), никаких дополнительных косых черт не требуется


1
Ваш ответ был бы намного лучше, если бы вы предоставили пример, которому может следовать начинающий пользователь. Спасибо!
Старейшина Компьютерщик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.