我制作了一个简单的脚本来执行 NAS 的备份。我这样做:
date="$(date +%Y-%m-%d)"
base="/backup"
newest="$(ls -1td "$base"/*-*-*/ | head -n 1)"
today="$base/$date"
dirs="pub,data,software"
if [ -d "$today" ]; then
echo "Backup already exists"
exit 1
fi
echo $newest
echo $dirs
mkdir "$today"
rsync -a --delete --info=progress2 "/myzpool/{$dirs}" "$today" --link-dest="$newest"
因此,它应该做的是创建一个名为当前日期的文件夹,然后将文件夹复制到/myzpool/pub
这个新创建的备份文件夹中。但令人惊讶的是,这不起作用!因错误而中止。/myzpool/data
/myzpool/software
rsync
rsync: link_stat "/myzpool/{pub,data,software}" failed: No such file or directory
我不明白为什么会发生这种情况,因为我使用一个非常相似的脚本通过 SSH 备份我的虚拟服务器:
dirs="srv,opt,home,root,etc"
mkdir "$today"
rsync -caz --compress-level=9 -e "ssh -i ~/.ssh/myserver.conf" --delete --info=progress2 "[email protected]:/{$dirs}" "$today" --link-dest="$newest"
并且使用虚拟服务器它工作得很好。那么这两个命令行之间有什么区别,如何修复我的脚本,使其也可以在本地运行?
答案1
我刚刚遇到了类似的问题,并确定了支撑扩展做在命令替换中工作。
问题是支撑扩展发生在其他任何事情之前,因此需要rsync
像这样运行eval rsync ...
,以便第二次完成支撑扩展。