我想从远程复制一个文件到本地系统。现在我在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 .

其他回答

作品

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

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

不起作用

scp localhost:'f/a b c' .

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

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

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

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

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

在linux-terminal或cmd中,如果字与字之间有空格,必须使用引号(")("")标记。

你应该这样做:

$ '/home/tryhackme'

not

$ /home/tryhackme

你也可以这样做:

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

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