
У меня возникла проблема с использованием PSCP в программе C# для копирования файла с машины 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"
И я пытался вызвать это из C# с помощью Process.Start(), и это не срабатывало. Казалось, что он мог бы справиться с этим, если бы был пробел либо в пути PSCP, либо в целевом пути, но не в обоих. Я исправил это, включив путь к исполняемому файлу PSCP в переменные среды Windows. Теперь я могу просто вызвать PSCP.EXE, и он работает с кавычками вокруг целевой папки.
решение2
Не используйте pscp
.
TheWinSCPклиент (который построен на основе PuTTY) предоставляетСборка .NET. Вотпример.
решение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, который я разобрал на запчасти. Я подключил HDD к моему настольному компьютеру Ubuntu, так как моя единственная текущая машина Windows — это ноутбук, и я не хотел покупать адаптер 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
формат исходной машины.
Надеюсь, это поможет кому-то, кто пытается использовать машину с Ubuntu для восстановления файлов с жесткого диска Windows.