
Чтобы перенести файл из терминала Linux в систему Windows, вполне подойдут следующие два примера.
scp /home/user.name/file.html [email protected]:/C:/Users/user.name/test_folder/file.html
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test_folder/file.html"
Мне нужно сделать это там, где в локальной папке есть пробелы, и я не могу изменить имя, скажем/C:/Users/user.name/test folder/
Все нижеперечисленное не приводит к сообщениюscp: ambiguous target
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test folder/file.html"
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\ folder/file.html"
scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\ folder/file.html'"
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\ folder/file.html"
scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\ folder/file.html'"
scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\\ folder/file.html"
scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\\ folder/file.html'"
Как мне это сделать?
решение1
Попробуйте использовать
quotes '
илиDouble quotes "
вокруг полного аргумента.Как предложил @dirkt в комментариях, цитирование полного аргумента пути для хоста ssh должно сработать. Это делает вашу команду такой:
scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
Использовать
escape sequence for space
между именем папки.Вы можете использовать
\
(обратный слеш с пробелом), который является escape-последовательностью для пробела. Это делает вашу команду такой:scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
Обратите внимание на
\
пробел междуtest
&folder
, который делает егоtest\ folder
.Может быть, это тот случай, когда вы
need to escape twice
как он экранируется сначала локально, а затем на удаленном конце. В этом случае вы можете написать так:"'complete argument'"
внутри кавычек внутри двойных кавычек, например:"'[email protected]:/C:/Users/user.name/test folder/'"
ИЛИ
Экранируйте пробелы и процитируйте полный аргумент следующим образом:
'[email protected]:/C:/Users/user.name/test\ folder/'
ИЛИ
Побег дважды напрямую, используя последовательность выхода, как эта
[email protected]:/C:/Users/user.name/test\\ folder/
Не стесняйтесь добавлять больше подробностей.
решение2
Пробовал все вышеперечисленные варианты для scp с клиента CentOS на Windows 7 (SP1), но безуспешно.
А вот это мне помогло:
$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'
решение3
Не знаю, актуально ли это еще, но одно из решений (которое может иметь неприятные последствия в некоторых ситуациях) — использовать «?» вместо пробела:
scp "user@ip:/home/user/file?with?spaces.txt" .
решение4
The"символ интерпретируется самим bash. Bash декапсулирует все, что находится между interbretes, если может, и просто представляет вывод вызываемой команде как строку, которая может содержать некоторые специальные символы. Попробуйте использовать апостроф (') символ для него заставляет bash вообще не смотреть на строку и просто передать ее команде, которая была вызвана первой. Эти строки с'должно быть отформатировано следующим образом: Если вы хотите увидеть
не
echo $'dont\'t'