scp 从远程 Linux 到本地 Windows,本地路径中有空格

scp 从远程 Linux 到本地 Windows,本地路径中有空格

要将文件从Linux终端推送到Windows系统,以下两个示例就可以了。

scp /home/user.name/file.html [email protected]:/C:/Users/user.name/test_folder/file.html

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test_folder/file.html"

我需要在本地文件夹有空格且无法更改名称的情况下执行此操作,例如/C:/Users/user.name/test folder/

以下所有操作均失败并显示以下消息scp: ambiguous target

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test folder/file.html"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\ folder/file.html'"

scp /home/user.name/file.html [email protected]:"/C:/Users/user.name/test\\\ folder/file.html"

scp /home/user.name/file.html [email protected]:"'/C:/Users/user.name/test\\\ folder/file.html'"

我怎样才能让它工作?

答案1

  • 尝试使用quotes '或者Double quotes "围绕完整的论点。

    正如 @dirkt 在评论中所建议的,引用 ssh 主机的完整路径参数应该可以完成这项工作。这使得您的命令如下所示:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test folder/'
    
  • 使用escape sequence for space位于文件夹名称之间。

    您可以使用\(反斜杠加空格)作为空格的转义序列。这样您的命令将如下所示:

    scp /home/user.name/file.html '[email protected]:/C:/Users/user.name/test\ folder/'
    

    注意在&\之间有一个空格,这使得testfoldertest\ folder

  • 也许你need to escape twice因为它首先在本地转义,然后在远程端转义。在这种情况下,你可以这样写:

    1. "'complete argument'"在双引号内加上引号,如下所示:

      "'[email protected]:/C:/Users/user.name/test folder/'"
      

      或者

    2. 转义空格并引用完整参数,如下所示:

      '[email protected]:/C:/Users/user.name/test\ folder/'
      

      或者

    3. 像这样使用转义序列直接转义两次

      [email protected]:/C:/Users/user.name/test\\ folder/
      

请随意添加更多详细信息。

答案2

尝试了上述所有选项从 CentOS 客户端 scp 到 Windows 7 (SP1),但没有成功。

不过这个对我有用:

$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'

答案3

我不知道这是否仍然相关,但一个解决方案(在某些情况下可能会适得其反)是使用“?”而不是空格:

scp "user@ip:/home/user/file?with?spaces.txt" .

答案4

符号由 bash 本身解释。如果可以,Bash 会解封装中间的任何内容,并将输出作为可能包含一些特殊符号的字符串呈现给正在调用的命令。尝试使用撇号 () 符号强制 bash 根本不查看字符串,而只是将其传递给首先调用的命令。那些带有格式应如下:如果你想看到

echo $'dont\'t'

相关内容