scp do Linux remoto para o Windows local com espaços no caminho local

1

Para enviar um arquivo de um terminal Linux para um sistema Windows, os dois exemplos a seguir funcionam bem.

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"

Eu preciso fazer isso onde a pasta local tem espaços e não posso alterar o nome, diga /C:/Users/user.name/test folder/

Todos os itens a seguir falham com a mensagem 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'"

Como faço para que isso funcione?

    
por Clay 04.04.2018 / 17:12

2 respostas

2
  • Tente usar quotes ' ou Double quotes " ao redor do argumento completo.

    Como sugerido por @dirkt nos comentários Citar o argumento do caminho completo para o host ssh deve fazer o trabalho. Isso faz com que seu comando seja assim:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
    
  • Use escape sequence for space entre o nome da pasta.

    Você pode usar \ (barra invertida com espaço) que é uma seqüência de escape para um espaço. Isso faz com que seu comando seja assim:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
    

    Observe o \ com um espaço entre test & folder que torna test\ folder .

  • Talvez seja o caso em que você need to escape twice é escaneado primeiro localmente e depois no remoto. Nesse caso, você pode escrever assim:

    1. "'complete argument'" dentro de aspas entre aspas duplas como esta:

      "'[email protected]:/C:/Users/user.name/test folder/'"
      

      OR

    2. Escape espaços e cite argumentos completos como este:

      '[email protected]:/C:/Users/user.name/test\ folder/'
      

      OR

    3. Escape duas vezes diretamente usando uma seqüência de escape como esta

      [email protected]:/C:/Users/user.name/test\ folder/
      

Sinta-se à vontade para adicionar mais detalhes.

    
por 04.04.2018 / 21:10
0

O símbolo " é interpretado pelo próprio bash. O Bash decompõe qualquer coisa entre interbretes se puder e apenas apresenta o outout para um comando sendo chamado como uma string que pode ter alguns símbolos especiais. Tente usar o símbolo de apóstrofo ( ') para forçar o bash a não olhar para a cadeia de caracteres e simplesmente passá-la para um comando que foi invocado primeiro. Essas strings com ' devem ser formatadas assim: Se você quiser ver

don't

echo $'dont\'t'
    
por 04.04.2018 / 19:53