Как использовать PSCP для копирования файла с компьютера Unix на компьютер с Windows, где целевой путь имеет пробелы?
У меня проблема с использованием PSCP в программе на C# для копирования файла с компьютера Unix на компьютер с Windows. Проблема возникает только в том случае, если в целевой папке на компьютере Windows есть пробел. Например, следующее работает нормально: (ПРИМЕЧАНИЕ: IP-адрес и пароль были изменены для этого примера)
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download
Но когда я изменю это на это:
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download files
Я получаю следующую ошибку: более одного удаленного источника не поддерживается.
Я понимаю, что это потому, что PSCP интерпретирует пространство как другую цель. Но как я могу это сделать? Я пробовал все виды вещей, таких как кавычки и выход из пространства. Я перепробовал все следующее и ничего не работает:
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\"download files"
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt C:\download\\ files
Есть идеи?
3 ответа
Хотя правильным ответом, вероятно, является использование WinSCP и их библиотеки C#, я нашел способ заставить PSCP работать, когда в целевой папке есть пробел.
Правильный ответ - сделать это:
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
Оказывается, у меня была другая проблема, которая заставляла меня думать, что вышеупомянутое не работало. Первоначально я использовал полный путь к исполняемому файлу PSCP.EXE. Полный путь включал пробелы. Поэтому я пытался сделать следующее:
"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
И я пытался вызвать это из C# с помощью Process.Start(), и это не удалось. Казалось, что он может справиться с этим, если в пути PSCP или пути назначения есть пробел, но не в обоих. Я исправил это, включив путь к исполняемому файлу PSCP в мои переменные среды Windows. Теперь я могу просто вызвать PSCP.EXE, и он работает с кавычками вокруг целевой папки.
Не использовать pscp
,
Клиент WinSCP (который построен поверх PuTTY) обеспечивает сборку.NET. Вот пример.
У меня была такая же проблема, я добавил
pscp.exe
каталог в качестве переменной PATH для сеанса в
cmd.exe
:
set PATH="C:\Program Files\PuTTY;%PATH"
У меня был старый нетбук с Windows, который я разобрал на запчасти. Я подключил жесткий диск к своему рабочему столу Ubuntu, поскольку моя единственная текущая машина с Windows - это ноутбук, и я не хотел получать адаптер SATA-USB. Я правильно смонтировал жесткий диск и мог перемещаться по файлам, но при попытке переноса с Ubuntu на Windows 10 с помощью:
pscp user@192.168.0.222:/media/path/to/file.zip "D:\backups
Я получил несколько ошибок, в том числе локальная копия в локальную не поддерживается, хост не существует и т. Д.
Мне удалось без проблем передать файл, используя
[OPTION]
предоставленный
pscp
называется
-load sessname
где
sessname
это имя сохраненного сеанса. Полная команда была следующей:
pscp -load ubuntu@local user@192.168.0.222:/media/path/to/file.zip "D:\backups
Это решило проблему, и с помощью
-load sessname
вариант работал для всех файлов и каталогов, которые я пытался передать, независимо от того, использую ли я
user@ipaddress
формат, или
user@hostname
формат для исходной машины.
Надеюсь, это поможет кому-то, кто пытается использовать машину Ubuntu для восстановления файлов с жесткого диска Windows.
Добавить точку в папку назначения. Следующее должно работать с приложением . на вашем примере:
"C:\My PSCP Folder\pscp.exe" -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files\."
pscp.exe -pw MyPassword root@127.0.0.1:/etc/myfolder/myfile.opt "C:\download files"
во-первых, как вы уже упоминали, на вашем пути есть пробелы. Поэтому было бы разумно использовать цитаты "C:\download files". Во-вторых, как вы уже указали, вам нужно добавить ваше приложение в PATH, чтобы вызывать pscp без какого-либо странного пути. и третье. Используйте соглашения об именах, которые предотвращают этот беспорядок, вызванный цитированием всего.
camelCaseNaming
underscore_naming
Оба решают проблему, и вы выглядите в 100500 раз круче.