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

2024-10-28 08:37:00
admin
原创
325
摘要:问题描述:我想将文件从远程复制到本地系统。现在我在 Linux 系统中使用 scp 命令。我有一些文件夹或文件的名称带有空格,当我尝试复制该文件时,它显示错误消息:“没有这样的文件或目录”。我试过:scp ael5105@192.168.0.200:'/home/5105/test/gg/U...

问题描述:

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

我试过:

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

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

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


解决方案 1:

基本上,您需要对其进行两次转义,因为它是在本地进行转义,然后在远程端进行转义。

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

另一个选项仅适用于旧版本的 OpenSSH 和可能的其他客户端:

scp user@example.com:"'web/tmp/Master File 18 0 13.xls'" .

解决方案 2:

作品

scp localhost:"f/a b c" .

scp localhost:'f/a b c' .

不起作用

scp localhost:'f/a b c' .

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

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

解决方案 3:

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

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

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

解决方案 4:

你也可以做类似的事情:

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

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

解决方案 5:

scp当我尝试使用Bash 脚本从包含空格的远程路径复制文件时遇到了类似的问题。

以下是我想到的解决方案:

手动退出路径:

scp user@host:'dir with spaces/file with spaces' <destination>
scp user@host:"dir\\ with\\ spaces/file\\ with\\ spaces" <destination>
scp user@host:dir\\ with\\ spaces/file\\ with\\ spaces <destination>

注意:不需要选项-T(见下文)。

使用双引号+选项-T

scp -T user@host:"'path with spaces'" <destination>
scp -T user@host:'"path with spaces"' <destination>
scp -T user@host:"\"path with spaces\"" <destination>

注意:如果没有选项-T,这些命令将失败。此处protocol error: filename does not match request详细讨论了原因。

使用 Bash 的 printf 退出路径:

source="path with spaces"
printf -v source "%q" "${source}"
scp user@host:"${source}" <destination>

用于 shell 的一行代码:

source="path with spaces"; printf -v source "%q" "${source}"; scp user@host:"${source}" <destination>

注意:无需选项即可正常工作-T

解决方案 6:

对于包含带空格的文件名的 shell 变量,我遇到了很大的困难。出于某种原因,使用:

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

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

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

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

解决方案 7:

抱歉,我使用这个 Linux 问题来为 Windows 10 上的 Powershell 提供这个提示:在这种情况下,用反斜杠转义或用引号括起来的空格字符对我来说不起作用。效率不高,但我改用“?”字符解决了它:

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

解决方案 8:

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

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

解决方案 9:

我是 Linux 新手,我使用 Kali xD,我的工作原理如下:如果您想将文件从您的系统传输到远程服务器,只需输入一个或多个空格:

$ scp this is my file tryhackme@1.1.1.1:/home/tryhackme

请注意,IP 地址仅作为示例,我最后输入的是目录和美元符号(提示符),代码以 scp 开头。

您还可以指定传输文件时所需的名称,例如/home/tryhackme/file1,使用一个或多个空格,如/home/tryhackme/"this is new file"

从远程服务器到您的系统,与上面相同,但有一个或多个空间:

$ scp tryhackme@1.1.1.1:/home/tryhackme/"remote server file" "this is mine now"

请注意,您只能对要复制的文件使用反斜杠\,因为您可以看到字符串"this is mine now"没有\,因为这是我们在传输到系统时想要的文件的名称,而不是我们想要安全复制(scp)的文件。抱歉我的解释,我希望有人能理解,我希望这对需要其他解决方案的人有所帮助。

解决方案 10:

只需在空格处插入通配符即可:'foo/bar*bar.txt'

解决方案 11:

如果文件或文件夹名称中间有空格,那么您只需在空格前添加一个黑色斜线“”,然后将整个路径放在单引号(“”)内,这样就可以了。

例子:

假设文件夹名称为“Test Folder”,位于远程计算机的 /home/ 内。然后,您可以使用以下 scp 命令访问或下载该文件夹。

scp -r <user>@<host>:'/home/Test Folder' .

解决方案 12:

在 linux-terminal 或 cmd 中,如果路径中单词之间有空格,则必须使用引号 ('') ("") 标记。

你应该像这样:

$ '/home/tryhackme'

不是

$ /home/tryhackme

解决方案 13:

尝试以下方法

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

这里文件夹前的空格用“\”(反斜杠)转义,路径放在“(引号)下。请检查 /var/www/try/ 是否存在。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用