
C# 프로그램에서 PSCP를 사용하여 Unix 컴퓨터에서 Windows 컴퓨터로 파일을 복사하는 데 문제가 있습니다. 문제는 Windows 시스템의 대상 폴더에 공백이 있는 경우에만 발생합니다. 예를 들어 다음은 정상적으로 작동합니다. (참고: 이 예에서는 IP 주소와 비밀번호가 변경되었습니다.)
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download
하지만 이것을 다음과 같이 바꾸면:
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt C:\download files
다음 오류가 발생합니다. 둘 이상의 원격 소스가 지원되지 않습니다.
PSCP는 공간을 또 하나의 타깃으로 해석하기 때문이라는 것을 깨달았습니다. 그런데 어떻게 할 수 있나요? 따옴표로 묶거나 공백을 벗어나는 등 모든 종류의 작업을 시도했습니다. 다음을 모두 시도했지만 아무것도 작동하지 않습니다.
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
어떤 아이디어가 있나요?
답변1
아마도 적절한 대답은 WinSCP와 해당 C# 라이브러리를 사용하는 것이지만 대상 폴더에 공백이 있을 때 PSCP가 작동하도록 하는 방법을 찾았습니다.
정답은 다음과 같습니다.
pscp.exe -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
위의 방법이 작동하지 않는다고 생각하게 만드는 또 다른 문제가 있다는 것이 밝혀졌습니다. 원래 PSCP.EXE 실행 파일의 전체 경로를 사용하고 있었습니다. 전체 경로에는 공백이 포함되었습니다. 그래서 나는 다음을 수행하려고했습니다.
"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files"
그리고 Process.Start()를 사용하여 C#에서 호출하려고 했는데 실패했습니다. PSCP 경로나 대상 경로 중 하나에 공백이 있지만 둘 다에는 공백이 있으면 처리할 수 있을 것 같았습니다. Windows 환경 변수에 PSCP 실행 파일의 경로를 포함하여 이 문제를 해결했습니다. 이제 PSCP.EXE를 호출할 수 있으며 대상 폴더 주변의 따옴표와 함께 작동합니다.
답변2
답변3
대상 폴더에 마침표를 추가합니다. 다음은 첨부된 내용과 함께 작동해야 합니다..귀하의 예에서 :
"C:\My PSCP Folder\pscp.exe" -pw MyPassword [email protected]:/etc/myfolder/myfile.opt "C:\download files\."
답변4
나는 같은 문제를 겪고 있었고 pscp.exe
다음의 세션에 대한 PATH 변수로 디렉토리를 추가했습니다 cmd.exe
.
set PATH="C:\Program Files\PuTTY;%PATH"
나는 부품을 위해 분해한 오래된 Windows 넷북을 가지고 있었습니다. 현재 Windows 컴퓨터가 노트북뿐이므로 HDD를 Ubuntu 데스크탑에 연결했고 SATA-USB 어댑터를 구입할 필요가 없었습니다. HDD를 올바르게 마운트했고 파일을 탐색할 수 있었지만 다음을 사용하여 Ubuntu에서 Windows 10으로 전송하려고 할 때:
pscp [email protected]:/media/path/to/file.zip "D:\backups
다음을 포함하여 여러 오류를 받았습니다.로컬 간 복사는 지원되지 않습니다.,호스트가 존재하지 않습니다, 등.
저장된 세션의 이름이 어디에 있는지 호출 [OPTION]
하여 제공된 을 사용하여 문제 없이 파일을 전송할 수 있었습니다 . 전체 명령은 다음과 같습니다.pscp
-load sessname
sessname
pscp -load ubuntu@local [email protected]:/media/path/to/file.zip "D:\backups
이를 통해 문제가 해결되었으며 이 옵션을 사용하면 해당 형식을 사용하든 소스 컴퓨터용 형식을 -load sessname
사용하든 관계없이 지금까지 전송하려고 시도한 모든 파일 및 디렉터리에 효과가 있었습니다 .user@ipaddress
user@hostname
이것이 Windows HDD에서 파일을 복원하기 위해 Ubuntu 시스템을 사용하려는 누군가에게 도움이 되기를 바랍니다.