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

Cla*_*lay 9 windows linux terminal scp

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

scp /home/user.name/file.html user.name@local.ip.num:/C:/Users/user.name/test_folder/file.html

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test_folder/file.html"
Run Code Online (Sandbox Code Playgroud)

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

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

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\ folder/file.html'"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\\ folder/file.html'"

scp /home/user.name/file.html user.name@local.ip.num:"/C:/Users/user.name/test\\\ folder/file.html"

scp /home/user.name/file.html user.name@local.ip.num:"'/C:/Users/user.name/test\\\ folder/file.html'"
Run Code Online (Sandbox Code Playgroud)

我该如何让它发挥作用?

小智 7

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

但这对我有用:

$ scp /tmp/lala 'win7@<IP>:"/Users/win7/Documents/TestComplete 14 Projects"'
Run Code Online (Sandbox Code Playgroud)

  • 这应该会得到更多的支持,因为这是我在尝试将文件从 Ubuntu 计算机复制到 Windows 10 上的内置 OpenSSH 版本时发现的唯一可行的方法。适用于 Windows 路径中的空格以及特殊字符 (x86) 。 (2认同)

C0d*_*lus 6

  • 尝试使用quotes 'or Double quotes "around 完整参数。

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

    scp /home/user.name/file.html 'user.name@local.ip.num:/C:/Users/user.name/test folder/'
    
    Run Code Online (Sandbox Code Playgroud)
  • escape sequence for space在文件夹名称之间使用。

    您可以使用\(带有空格的反斜杠)作为空格的转义序列。这使得你的命令像这样:

    scp /home/user.name/file.html 'user.name@local.ip.num:/C:/Users/user.name/test\ folder/'
    
    Run Code Online (Sandbox Code Playgroud)

    注意&\之间有一个空格,使得它成为。testfoldertest\ folder

  • 可能的情况是,您need to escape twice首先在本地转义,然后在远程端转义。在这种情况下你可以这样写:

    1. "'complete argument'"双引号内的引号如下:

      "'user.name@local.ip.num:/C:/Users/user.name/test folder/'"
      
      Run Code Online (Sandbox Code Playgroud)

      或者

    2. 转义空格并引用完整的论点,如下所示:

      'user.name@local.ip.num:/C:/Users/user.name/test\ folder/'
      
      Run Code Online (Sandbox Code Playgroud)

      或者

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

      user.name@local.ip.num:/C:/Users/user.name/test\\ folder/
      
      Run Code Online (Sandbox Code Playgroud)

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

  • 现在Windows 10中已经有了原生的OpenSSH,在其中添加反斜杠是行不通的。 (2认同)

小智 6

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

scp "user@ip:/home/user/file?with?spaces.txt" .
Run Code Online (Sandbox Code Playgroud)

  • 这对我使用 Windows 命令提示符下的 SCP 和作为 Ubuntu 服务器的远程计算机有用。 (2认同)