我正在尝试将一个文件从本地 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 bash
scp
单/双引号:
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"'"'