当前位置: 首页 > 知识库问答 >
问题:

如何scp名称中带有空格的目录[duplicate]

李敏学
2023-03-14

我现在正在尝试将整个目录从一个集群镜像复制到另一个集群。但是当名称中有一个空格时,它失败了,我不知道如何解决这个问题,因为scp似乎认为我在复制多个文件。我正在使用一个变量来标记我需要的路径,所以添加反斜杠似乎不容易解决。

这是我正在使用的代码:

if ssh user@ip -i key test -d "'$current_dir'"; then
 echo "Directory exists. Ready to copy $dir_name."
 scp -i key -r "$current_dir/$dir_name" user@$ip:"$current_dir/$dir_name"
else
 echo Directory doesn\'t exist. Making a new directory.
 ssh user@$ip -i key mkdir "'$current_dir'"
 scp -i key -r "$current_dir/$dir_name" user@$ip:"$current_dir/$dir_name"
fi

我试过单引号、双引号和单引号加双引号,都不行。有人能帮我解决吗?顺便说一下,代码中的mkdir语句是有效的。

共有3个答案

穆俊名
2023-03-14

您需要将字段分隔符设置为空格。

OIFS=$IFS  #save the original
IFS=$"\ "  #set to space
current_dir="some dir with spaces"
scp_current_dir="some\\ dir\\ with\\ spaces"
dir_name="another dir with spaces"
scp_dir_name="another\\ dir\\ with\\ spaces"
if ssh user@ip -i key test -d $current_dir; then
 echo "Directory exists. Ready to copy $dir_name."
 scp -i key -r "$current_dir/$dir_name" user@$ip:"$scp_current_dir/$scp_dir_name"
else
 echo Directory doesn\'t exist. Making a new directory.
 ssh user@$ip -i key mkdir $current_dir
 scp -i key -r "$current_dir/$dir_name" user@$ip:"$scp_current_dir/$scp_dir_name"
fi
IFS=$OIFS  #reset it back to the original
屠锐
2023-03-14

您可以使用 sed 转义目录名称中的空格:

current_dir = "/usr/bin/Directory With Spaces"
escaped_current_dir = `sed s/ /\\ /g $current_dir`
# escaped_current_dir = "/usr/bin/Directory\ With\ Spaces"

带有转义空格的字符串将被读取为一个字符串,并且只有一个字符串,这就是我们想要的。

荀正谊
2023-03-14

正如这个答案中详细描述的,您需要使用两组引号,因为文件名被解释两次:一次由本地计算机解释,一次由远程计算机解释。

scp -i key -r "$current_dir/$dir_name" user@$ip:"'$current_dir/$dir_name'"
 类似资料:
  • 我正试图进入目录: 当我手动输入它时,退格会执行其转义字符操作,但当我对变量使用参数展开时,退格不会执行。 我尝试了其他变化,例如没有反斜杠。 或 也是如此: 也不起作用。必须加上引号。 搞什么鬼:

  • 文件路径类似于C:\test\NPP\223083-A\u BELI Frenchips Poulet roti face。eps 该命令适用于文件名中没有空格但带有空格的文件,它给出的错误如下: {转换:无法打开图像'C:\test\NPP\223083-A_BELI':没有这样的文件或目录@error/blob. c/OpenBlob/3094.convert:没有此图像格式的解码委托'@er

  • 问题内容: 运行将返回“ Clear Workspace = true”。如何在bash中访问它?仅供参考,它来自Jenkins Parameterized Build参数名称。似乎不起作用。 而且,詹金斯怎么能创建这个环境变量?在bash中运行显然不起作用,因为它尝试使用参数“ Workspace = true”运行“ Clear”命令。 我当然可以将作业参数名称设置为Clear_Workspa

  • 问题内容: 我 是否 必须删除文件名中的所有空格才能将其导入,或者是否可以通过某种方式知道是否存在空格? 问题答案: 您应该从文件名中删除空格。由于文件名被用作导入模块的标识符(即将被导入为),而Python标识符不能有空格,因此该语句不支持此操作。 如果由于某些原因 确实 需要执行此操作,可以使用以下函数: 这将导入为。这与该语句的行为略有不同,应避免使用它。

  • 我正在尝试用SCP复制本地网络中的文件。它在没有空格的文件名中工作得很好,但在使用时会崩溃。我试着把“”替换成“\”作为这个例子,但它不起作用。下面是我的代码: 如何修复此问题?谢谢

  • 问题内容: 我正在尝试运行一个OSPL命令,该命令是plutil,用于将某些plist转换为json格式。我在终端中使用的命令是 路径名称带有白色间距的此命令在我的终端中可以很好地运行,并且我的终端用单引号(“)覆盖路径名,但是问题在于在Java 下面运行此命令是我编写的代码 如果我运行此代码,它将给我一个错误 我也尝试过 在命令字符串中放入撇号 按我建议的几个站点更改数组字符串中的命令 但没有一