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

时间:2013-11-08 11:36:23

标签: linux unix ubuntu whitespace scp

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

我试过了:

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

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

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

7 个答案:

答案 0 :(得分:408)

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

你可以做几个选项(在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 .

答案 1 :(得分:64)

作品

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

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

不起作用

scp localhost:'f/a b c' .

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

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

答案 2 :(得分:26)

你也可以这样做:

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

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

答案 3 :(得分:6)

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

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

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

答案 4 :(得分:3)

我很难让这个包含带空格的文件名的 shell变量。事实证明,使用

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

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

事实证明,最好的方法是使用参数扩展将反斜杠预先添加到空白,如下所示。

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"

答案 5 :(得分:3)

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

?在遥控器上做一个 glob 并将匹配任何字符,包括空格

答案 6 :(得分:0)

很抱歉使用此Linux问题在Windows 10上为Powershell提供此技巧:在这种情况下,对空格字符加反斜杠或引号引起的空格不适合我。效率不高,但我使用“?”解决了问题用char代替:

对于文件“ tasks.txt Jun-22.bkp”,我使用“ tasks.txt?Jun-22.bkp”下载了该文件