Я пытаюсь rsync с одного сервера на другой. Серверы имеют одинаковую структуру каталогов, но у меня возникают проблемы с тем, чтобы удаленный сервер правильно распознавал имя пути на удаленном компьютере, когда в нем есть место.
Вот подробности
Локальный каталог
mnt/xlses/split/v2/name with space
Удаленный каталог
mnt/xlses/split/v2/name with space
Я перепробовал все, что смог найти, последняя попытка была
rsync --size-only -avzPe ssh /mnt/xlses/split/v2/name\ with\ space/ root@myserver.com:/mnt/xlses/split/v2/"name with space"
когда он запускает первое, что он сообщает, это то, что он создает новый каталог
Я прерываю это и вижу, что есть новый каталог
mnt/xlses/split/v2/name
все мои файлы находятся в этом каталоге
Я ожидал, что они будут в
mnt/xlses/split/v2/name with space
Пытаться
От
man rsync
:источник
man rsync
и выполнив поиск (/s
) для "--protect". Для установки с помощью homebrew:brew install homebrew/dupes/rsync
Если не найдено, запуститеbrew search rsync
.rsync -Pavuz 'you@host:~/file\ with\ spaces' ./
Это работает в bash: выйдите из пробелов с помощью обратной косой черты, а затем используйте кавычки:
Или, если у вас есть путь в переменной $ remote_path, пробелы могут быть экранированы заменой:
источник
-s
опция работает на любой современной версии rsync и предназначена для решения этой проблемыИспользуйте две пары цитат
Не беспокойтесь обо всех обратных косых чертах, просто используйте одинарные кавычки внутри двойных кавычек :
Вы также можете использовать обратное, то есть двойные кавычки внутри одинарных кавычек :
Дальнейшая информация
Подстановочные знаки на стороне сервера
Если вы хотите, чтобы a
*
интерпретировался на сервере, а не на клиенте, он*
должен входить в одну из двух пар кавычек. Я нахожу это нелогичным, потому что логически внешняя пара кавычек избегает интерпретации клиента, в то время как внутренняя пара кавычек избегает интерпретации сервера.Защити Аргс
Преимущество по сравнению с
--protect-args
решением состоит в том, что у вас фактически нет ограничений--protect-args
, поэтому вы можете использовать специальные символы, такие как~
или$
. Таким образом, вы можете написать:или же
Обратите внимание, что tilde (
~
) в последнем примере должна быть вне двойных кавычек.Вы можете поместить одну из пар кавычек вокруг всего имени пользователя @ host: часть файла (например
ssh "me@myserver.com:'/home/me/test file'" .
)источник
Я понимаю, что это старый вопрос, но я думал, что добавлю к существующей совокупности знаний.
Я использовал
rsync
с несколькими папками с пространством, и это работает. У меня есть папки с номерами от 1 до 10 следующим образом:The\ Folder1
The\ Folder2
The\ Folder3
The\ Folder10
2 экземпляра, которые вы хотели бы использовать,
rsync
являются локальными и удаленными.Местный - обратите внимание на отсутствие кавычек.
Remote - обратите внимание на наличие кавычек
источник
Вообще говоря, цитируйте аргумент и избегайте пробелов в аргументе. В приведенном вами примере попробуйте:
источник
Из
rsync
справочных страниц:источник
Ну, я собираюсь ответить на этот вопрос сам, хотя кто-то может лучше объяснить его.
Очевидно, что настройка на конечном компьютере влияет на то, как анализируются аргументы, и у нас должна быть какая-то настройка, которая затрудняет использование кавычек или слэшей для выхода из пробелов, но мы можем использовать подстановочные знаки, поэтому я сделал это
Это работает для меня, потому что есть только один каталог, который начинается с имени, если у меня было несколько каталогов, это не будет работать.
В конечном итоге мне нужно понять, как настроить удаленный сервер так, чтобы он мог более эффективно анализировать имя пути - я никогда не использую пробелы в именах каталогов, но человек, который это настраивал, сделал, и по крайней мере на данный момент я застрял
источник
В зависимости от ситуации, быстрый вариант - создать символическую ссылку на удаленной системе:
Затем используйте
-L
флаг, вrsync
котором указывается следовать содержимому каталога:источник
двойной побег работает тоже
источник
Попробуйте так:
источник