
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.exe
directorio 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 pscp
llamado -load sessname
donde sessname
está 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 sessname
opción funcionó para todos los archivos y directorios que intenté transferir hasta ahora, ya sea que use el user@ipaddress
formato o el user@hostname
formato 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.