【发布时间】:2016-02-27 10:56:20
【问题描述】:
我现在正在尝试将整个目录从一个集群镜像复制到另一个集群。但是当名称中有空格时它会失败,我无法弄清楚如何解决这个问题,因为似乎 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 语句有效。
【问题讨论】:
-
这到底是哪一部分失败了?
$current_dir的值是多少?你到底得到了什么错误? -
嘿伊坦。
$current_dir是存储从pwd返回的路径的变量。并且错误说 scp ambiguous target。 -
显示失败的
$current_dir的准确错误和准确值。您可以使用set -x让 shell 打印出它在运行时将执行的确切命令。 -
设置-x后显示没有这样的文件或目录,这是合理的,因为当目录名中有空格时,scp可能会将一个目录视为两个文件。
-
你错过了我评论中的 show 部分。 显示
set -x和准确的错误输出。您可能非常需要转义或额外引用文件名中的空格,以便它们通过 scp 但没有看到发生了什么我不能确定我什至知道问题是什么。