¿Cómo utilizar PSCP para copiar archivos desde una máquina Unix a una máquina Windows donde la ruta de destino tiene espacios?

¿Cómo utilizar PSCP para copiar archivos desde una máquina Unix a una máquina Windows donde la ruta de destino tiene espacios?

Tengo problemas al usar PSCP en un programa C# para copiar un archivo desde una máquina Unix a una máquina con Windows. El problema sólo ocurre cuando la carpeta de destino en la máquina con Windows tiene un espacio. Por ejemplo, lo siguiente funciona bien: (NOTA: la dirección IP y la contraseña se cambiaron para este ejemplo)

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download

Pero cuando lo cambio a esto:

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download files

Recibo el siguiente error: No se admite más de una fuente remota.

Me doy cuenta de que eso se debe a que PSCP interpreta el espacio como otro objetivo. ¿Pero cómo puedo hacerlo? He intentado todo tipo de cosas, como ponerlo entre comillas y escapar del espacio. He probado todo lo siguiente y 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

¿Algunas ideas?

Respuesta1

Aunque la respuesta adecuada probablemente sea usar WinSCP y su biblioteca C#, encontré una manera de hacer que PSCP funcione cuando la carpeta de destino tiene un espacio.

La respuesta correcta es hacer esto:

pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

Resulta que estaba teniendo otro problema que me hacía pensar que lo anterior no funcionaba. Originalmente estaba usando la ruta completa al ejecutable PSCP.EXE. El camino completo incluía espacios. Entonces estaba tratando de hacer lo siguiente:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"

Y estaba intentando llamar a eso desde C# usando Process.Start() y estaba fallando. Parecía que podía manejarlo si había un espacio en la ruta PSCP o en la ruta de destino, pero no en ambas. Lo solucioné incluyendo la ruta al ejecutable de PSCP en mis variables de entorno de Windows. Ahora puedo simplemente llamar a PSCP.EXE y funciona con las comillas alrededor de la carpeta de destino.

Respuesta2

No lo uses pscp.

ElWinSCPEl cliente (que está construido sobre PuTTY) proporciona unaEnsamblaje .NET. Aquí hay unejemplo.

Respuesta3

Agregue un punto a la carpeta de destino. Lo siguiente debería funcionar con el adjunto.en tu ejemplo:

"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files\."

Respuesta4

Estaba teniendo el mismo problema, agregué el pscp.exedirectorio como una variable PATH para la sesión en cmd.exe:

set PATH="C:\Program Files\PuTTY;%PATH"

Tenía una vieja netbook con Windows que desarmé por piezas. Conecté el disco duro a mi escritorio Ubuntu ya que mi única máquina con Windows actual es una computadora portátil y no quería tener que comprar un adaptador SATA a USB. Monté el disco duro correctamente y pude navegar por los archivos, pero cuando intenté transferir de Ubuntu a Windows 10 usando:

pscp [email protected]:/media/path/to/file.zip "D:\backups

Recibí múltiples errores, incluyendoNo se admite la copia local a local,El anfitrión no existe, etc.

Pude transferir el archivo sin problemas usando el [OPTION]proporcionado por pscpllamado -load sessnamedonde sessnameestá el nombre de una sesión guardada. El comando completo fue el siguiente:

pscp -load ubuntu@local [email protected]:/media/path/to/file.zip "D:\backups

Esto resolvió el problema y el uso de la -load sessnameopción funcionó para todos los archivos y directorios que intenté transferir hasta ahora, ya sea que use el user@ipaddressformato o el user@hostnameformato de la máquina de origen.

Con suerte, esto ayudará a alguien que intente utilizar una máquina Ubuntu para restaurar archivos desde un disco duro de Windows.

información relacionada