首页 文章

如何在Linux中的scp复制期间转义路径中的空格?

提问于
浏览
237

我是linux的新手,我想将文件从远程复制到本地系统...现在我在linux系统中使用scp命令..我有一些文件夹或文件名是带空格的,当我尝试复制时文件,它显示错误消息:“没有这样的文件或目录”

我试过了:

scp ael5105@192.168.0.200:'/home/5105/test/gg/Untitled Folder/a/qy.jpg' /var/www/try/

我在网上看到了一些参考资料,但我不完全理解,有人可以帮忙吗?

如何在复制过程中转义文件名或目录名中的空格...

5 回答

  • 0

    你也可以这样做:

    scp foo@bar:"\"apath/with spaces in it/\""
    

    第一级引号将由scp解释,然后第二级引号将保留空格 .

  • 376

    基本上你需要两次逃避它,因为它在本地转义然后在远程端转义 .

    你可以做几个选项(在bash中):

    scp user@example.com:"'web/tmp/Master File 18 10 13.xls'" .
    scp user@example.com:"web/tmp/Master\ File\ 18\ 10\ 13.xls" .
    scp user@example.com:web/tmp/Master\\\ File\\\ 18\\\ 10\\\ 13.xls .
    
  • 24

    作品

    scp localhost:"f/a\ b\ c" .
    
    scp localhost:'f/a\ b\ c' .
    

    不起作用

    scp localhost:'f/a b c' .
    

    原因是在将路径传递给scp命令之前,shell会解释该字符串 . 因此当它到达远程时,远程正在查找带有未转义引号的字符串,但它失败了

    要查看此操作,请使用-vx选项(即 bash -vx )启动一个shell,它将在运行命令时显示该命令的插补版本 .

  • 3

    我很难让这个包含带有空格的文件名的 shell variable 工作 . 事实证明,使用

    file="foo bar/baz"
    scp user@example.com:"'$file'"
    

    就像@Adrian的回答似乎失败了(尝试在上面的命令之前输入 set -x 来看看shell如何解释这个字符串;它非常难以理解,我真的不明白为什么它会失败) .

    事实证明,最好的方法是使用参数扩展到 to prepend backslashes to the whitespace ,如下所示 .

    file="foo bar/baz" # a file inside a directory-name with whitespace
    file="${file//\ /\\\ }" # the `//` replaces all instances; `/` just replaces the first
    scp user@example.com:"$file"
    
  • 59

    使用3个反斜杠来转义目录名称中的空格:

    scp user@host:/path/to/directory\\\ with\\\ spaces/file ~/Downloads

    应该从名为 directory with spaces 的远程目录中将 file 复制到 Downloads 目录 .

相关问题