bash - 如何 scp 名称中带有空格的目录

标签 bash scp

我现在正在尝试将整个目录从一个集群镜像复制到另一个集群。但是当名称中有空格时它就会失败,并且我不知道如何解决这个问题,因为 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 语句是有效的。

最佳答案

detailed in this answer ,您需要使用两组引号,因为文件名被解释两次:一次由本地计算机解释,一次由远程计算机解释。

scp -i key -r "$current_dir/$dir_name" user@$ip:"'$current_dir/$dir_name'"

关于bash - 如何 scp 名称中带有空格的目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33903171/

相关文章:

java - 如何从 .conf 运行 jar?

bash - 如何使 ssh 与 -o StrictHostKeyChecking=no 在 docker 上运行,以便 ssh 主机工作而不退出脚本执行?

bash - 读取stdout时如何保留shell脚本行距?

java - "Auth fail"(com.jcraft.jsch.JSchException)

c - 谁必须负责以下 scp 示例中的通配符处理?

ssh - 在Taverna中执行Abaqus模型

terminal - 如何用一行用户名和密码执行一个scp命令

linux - 脚本:从远程计算机读取文件并存储在 dir 变量中

bash - 从特定行开始在文件中插入行

c# - 识别新同步的文件 (WinSCP)