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

我试着:

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

我在网上看到了一些参考资料,但我不太明白,有人能帮我吗?

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


当前回答

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

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

其他回答

对不起,我用这个Linux问题把这个技巧放在Windows 10的Powershell上:用反斜杠转义的空格字符或用引号括起来的空格字符在这种情况下不适合我。效率不高,但我用“?”char来解决它:

“tasks.txt”文件6月22日。我用"tasks.txt?Jun-22.bkp"下载的

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

scp user@host:/path/to/directory\\\ space /file ~/下载

应该从名为“带空格的目录”的远程目录中将文件复制到“下载”目录。

我有巨大的困难,使这一工作的shell变量包含一个文件名与空格。出于某种原因使用:

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

比如@Adrian的回答似乎失败了。

事实证明,最有效的方法是使用参数展开将反斜杠前置到空格,如下所示:

file="foo bar/baz"
file=${file// /\\ }
scp user@example.com:"$file"

只需要在空格的位置插入通配符:'foo/bar*bar.txt'

你也可以这样做:

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

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