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

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

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 usarquotes '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/'
    
  • Usarescape sequence for spaceentre 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 entre teste folderisso o tornatest\ folder.

  • Talvez seja o caso de vocêneed to escape twicepois é escapado primeiro localmente e depois na extremidade remota. Nesse caso você pode escrever assim:

    1. "'complete argument'"entre aspas entre aspas duplas como este:

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

      OU

    2. Escape dos espaços e cite o argumento completo como este:

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

      OU

    3. 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'

informação relacionada