scp 到路径中带有空格的远程 Windows 主机:目标不明确

scp 到路径中带有空格的远程 Windows 主机:目标不明确

我正在尝试将一个文件从本地 Linux 计算机传输到远程 Windows 计算机,并且在 scp 处理带空格的 Windows 文件路径的方式上遇到了一些不一致的情况...

这是可行的,请注意,本地文件的路径中的空格已正确转义:

scp /home/will/file\ with\ spaces.txt remote@host:D:/Users/will/Downloads/

然而,这确实不是尽管“Google Drive”文件夹中的空间被正确转义,但仍然可以工作:

scp /home/will/file\ with\ spaces.txt remote@host:D:/Users/will/Google\\ Drive/Documents/Computer_Stuff/Home_Lab/folder

我经历过一个人们有类似问题的在线资源,但他们的所有解决方案都不适合我。

我尝试将 Windows 文件路径放在双引号、单引号中,带或不带转义空格;我尝试过使用双倍\\和三倍\\\来逃避空格;我什至尝试转义冒号 ( D\:);我尝试明确指定目标文件名,但没有。什么都没起作用。

然后我发现这个答案, 和只有方法#2有效!为什么?'"、 和中包围 Windows 文件路径有什么区别"'?为什么我可以在本地 Linux 文件路径中完全不使用任何引号而简单地转义空格,但在远程 Windows 路径中却不能?

答案1

正如问题中提到并回答的这里,方法2是对我的案例有效的解决方案。添加为答案,以方便后来的读者。

  • Windows 10
  • git bashscp

单/双引号:
scp ./myfile.txt user@host:'"/c:/AppName/a poorly named dir/sub_dir/myfile.txt"'

答案2

我对 Windows 10 非常着迷——这对我有用

scp -r user@hostname:"/Library/Application' 'Support/Adobe/Common/Plug-ins/7.0/" ./Adobe

答案3

使用该-T选项:

scp -T [email protected]:'"c:\path with\spaces in\it\foo.txt"' .

答案4

平台:

  • Ubuntu 18.04 ARM 上的 scp
  • Windows 10 上的 OpenSSH 服务器

上面答案中的单/双引号可以工作,但我想使用目录变量。经过一番搜索后,效果如下。

如果你想在脚本中使用变量:

sshpass -p "$password" scp myfile.txt user@host:'"'"$directory"'"'

相关内容