已经搜索了几个小时,仍然无法弄清楚:(
无论如何,我正在创建一个脚本,该脚本将自动将大约 40 个不同的目录重新同步到另一台服务器上的其他 40 个目录。 如果您想查看整个脚本,可以在此处查看:http://pastebin.com/Nt3KKvx9
但重要的一点是我运行 rsync 的 for 循环
for ((i=0; i<${#websys[@]}; i++))
do
localpath="/nusdata/staff/NUS/NUS/Systems/${kiskasys[$i]}"
remotepath="/home/www/html/nusalaska.com/html/systems/${websys[$i]}"
rsync -rlptnvz -s "$localpath" -e "ssh -p 50014" "nusak@webserver:$remotepath/"
done
问题是数组"kiskasys"有许多目录名称,其中有空格(例如:"101 greenbrook")。我尝试使数组变量周围有单引号,周围有双引号,转义空格(如"\")以及这三者的组合。我也尝试将$localpath放在引号中,而不是引号等。
我想我只是对 -s (--protect-args) 如何处理空格以及如何让它在我的情况下工作感到困惑。
错误输出始终如下所示:
rsync: change_dir "/nusdata/staff/NUS/NUS/101" failed: No such file or directory (2)
或
rsync: change_dir "/nusdata/staff/NUS/NUS/'101 greenbrook'" failed: No such file or directory (2)
任何帮助不胜感激!
谢谢
找到我的问题
在将我的代码从我的脚本复制到此页面时,我不小心复制了它......但是,在复制错误的情况下,我上面发布的是非常好的代码,运行良好哈哈。
所以我上面发布的是我自己问题的解决方案。
原版在 localpath 变量中有单引号,如下所示:
localpath="'/nusdata/staff/NUS/NUS/Systems/${kiskasys[$i]}'"
单引号是问题所在。为了每个人的利益,这里有一个示例输出
echo ${kiskasys[1]}
#output would look like this:
101 greenbrook
基本上没有特殊的转义字符等。
对于它的价值,我无法复制您的问题。 如果我将localpath
和remotepath
设置为带有空格的目录:
localpath="/home/lars/tmp/so/dir1/a directory"
remotepath="/home/lars/tmp/so/dir2/a directory"
然后运行您的 rsync
命令(针对我的环境稍作修改):
rsync -rlptvz -s "$localpath/" -e "ssh" "localhost:$remotepath/"
它只是工作。 以下是dir1
的内容:
dir1/a directory/file1
dir1/a directory/file3
dir1/a directory/file2
运行 rsync 后,dir2
如下所示:
dir2/a directory/file1
dir2/a directory/file3
dir2/a directory/file2
你能显示一个特定的命令行来导致你在上面看到的错误吗? 也许使用 -x
标志运行脚本,并准确显示如何设置localpath
和remotepath
。