Como usar o PSCP para copiar arquivos de uma máquina Unix para uma máquina Windows onde o caminho de destino contém espaços?

Como usar o PSCP para copiar arquivos de uma máquina Unix para uma máquina Windows onde o caminho de destino contém espaços?

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.exediretó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 pscpchamado -load sessnameonde sessnameestá 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 sessnameopção funcionou para todos os arquivos e diretórios que tentei transferir até agora, quer eu use o user@ipaddressformato ou o user@hostnameformato 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.

informação relacionada