
Estou tendo problemas ao usar o PSCP em um programa C# para copiar um arquivo de uma máquina Unix para uma máquina Windows. O problema só acontece quando a pasta de destino na máquina Windows contém espaço. Por exemplo, o seguinte funciona bem: (NOTA: o endereço IP e a senha foram alterados para este exemplo)
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download
Mas quando eu mudo para isto:
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download files
Recebo o seguinte erro: Mais de uma fonte remota não suportada.
Percebo que isso acontece porque o PSCP interpreta o espaço como mais um alvo. Mas como posso fazer isso? Eu tentei todos os tipos de coisas, como colocar entre aspas e escapar do espaço. Eu tentei todos os itens a seguir e nada funciona:
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\"download files"
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download\\ files
Alguma ideia?
Responder1
Embora a resposta adequada seja provavelmente usar o WinSCP e sua biblioteca C#, encontrei uma maneira de fazer o PSCP funcionar quando a pasta de destino tiver espaço.
A resposta correta é fazer isso:
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
Acontece que eu estava tendo outro problema que me fazia pensar que o procedimento acima não estava funcionando. Originalmente eu estava usando o caminho completo para o executável PSCP.EXE. O caminho completo incluía espaços. Então eu estava tentando fazer o seguinte:
"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
E eu estava tentando chamar isso de C# usando Process.Start() e estava falhando. Parecia que poderia lidar com isso se houvesse um espaço no caminho PSCP ou no caminho de destino, mas não em ambos. Corrigi isso incluindo o caminho para o executável PSCP em minhas variáveis de ambiente do Windows. Agora posso apenas chamar PSCP.EXE e ele funciona com aspas na pasta de destino.
Responder2
Não use pscp
.
OWinSCPcliente (que é construído sobre PuTTY) fornece umMontagem .NET. Aqui está umexemplo.
Responder3
Anexe um ponto final à pasta de destino. O seguinte deve funcionar com o anexo.no seu exemplo:
"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files\."
Responder4
Eu estava tendo o mesmo problema, adicionei o pscp.exe
diretório como uma variável PATH para a sessão em cmd.exe
:
set PATH="C:\Program Files\PuTTY;%PATH"
Eu tinha um netbook antigo do Windows que desmontei em busca de peças. Conectei o HDD ao meu desktop Ubuntu, pois minha única máquina Windows atual é um laptop e não queria um adaptador SATA para USB. Montei o HDD corretamente e consegui navegar pelos arquivos, mas ao tentar transferir do Ubuntu para o Windows 10 usando:
pscp [email protected]:/media/path/to/file.zip "D:\backups
Recebi vários erros, incluindoCópia local para local não suportada,O anfitrião não existe, etc.
Consegui transferir o arquivo sem problemas usando o [OPTION]
fornecido por pscp
chamado -load sessname
onde sessname
está o nome de uma sessão salva. O comando completo foi o seguinte:
pscp -load ubuntu@local [email protected]:/media/path/to/file.zip "D:\backups
Isso resolveu o problema e o uso da -load sessname
opção funcionou para todos os arquivos e diretórios que tentei transferir até agora, quer eu use o user@ipaddress
formato ou o user@hostname
formato da máquina de origem.
Esperamos que isso ajude alguém que está tentando usar uma máquina Ubuntu para restaurar arquivos de um HDD do Windows.