当前位置: 首页>>技术教程>>正文


在Linux中,如何转义SCP复制路径中的空格?

, , , ,

问题描述

我是Linux新手,我想将文件从远程复制到本地系统…现在,我在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,它将在运行命令时显示命令的内插版本。

第三种思路

您也可以执行以下操作:

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

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

第四种思路

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

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

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

第五种思路

我很难将其用于包含空格的文件名的shell变量。由于某些原因使用

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

就像@Adrian的回答似乎失败了。

事实证明,最有效的方法是使用参数扩展将反斜杠添加到空格之前,如下所示。

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

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8767.html,未经允许,请勿转载。