
Para enviar um arquivo de um terminal Linux para um sistema Windows, os dois exemplos a seguir funcionam perfeitamente.
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"
Preciso fazer isso onde a pasta local tem espaços e não consigo alterar o nome, digamos/C:/Users/user.name/test folder/
Todos os itens a seguir falham com a mensagemscp: 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'"
Como faço para que isso funcione?
Responder1
Tente usar
quotes '
ouDouble quotes "
em torno de um argumento completo.Conforme sugerido por @dirkt nos comentários, citar o argumento do caminho completo para o host ssh deve resolver o problema. Isso torna seu comando assim:
scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
Usar
escape sequence for space
entre o nome da pasta.Você pode usar
\
(barra invertida com espaço) que é uma sequência de escape para um espaço. Isso torna seu comando assim:scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
Observe o
\
com um espaço entretest
efolder
isso o tornatest\ folder
.Talvez seja o caso de você
need to escape twice
pois é escapado primeiro localmente e depois na extremidade remota. Nesse caso você pode escrever assim:"'complete argument'"
entre aspas entre aspas duplas como este:"'[email protected]:/C:/Users/user.name/test folder/'"
OU
Escape dos espaços e cite o argumento completo como este:
'[email protected]:/C:/Users/user.name/test\ folder/'
OU
Escape duas vezes diretamente usando uma sequência de escape como esta
[email protected]:/C:/Users/user.name/test\\ folder/
Sinta-se à vontade para adicionar mais detalhes.
Responder2
Tentei todas as opções acima para scp do cliente CentOS para o Windows 7 (SP1), mas sem sucesso.
Este funcionou para mim:
$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'
Responder3
Não sei se isso ainda é relevante, mas uma solução (que pode sair pela culatra em algumas situações) é usar "?" em vez de espaço:
scp "user@ip:/home/user/file?with?spaces.txt" .
Responder4
O"o símbolo é interpretado pelo próprio bash. O Bash desencapsula qualquer coisa entre os interbretes, se puder, e apenas apresenta a saída para um comando chamado como uma string que pode ter alguns símbolos especiais. Tente usar o apóstrofo (') símbolo para forçar o bash a não olhar para a string e apenas passá-la para um comando que foi invocado primeiro. Essas cordas com'deve ser formatado assim: Se você quiser ver
não
echo $'dont\'t'