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), дополнительные косые черты не нужны