为什么这个 rsync 调用不能正常工作?

为什么这个 rsync 调用不能正常工作?

我制作了一个简单的脚本来执行 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/softwarersyncrsync: 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 ...,以便第二次完成支撑扩展。

此答案了解更多详细信息...

相关内容