この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"

そして、仮想サーバーを使用するとうまく動作します。それでは、これら2つのコマンドラインの違いは何ですか?スクリプトがローカルで実行されるようにどのように変更しますか?

答え1

同様の問題が発生し、サポートの拡張を確認しました。するコマンド置換で動作します。

問題は、支柱の拡張が他のものよりも先に起こるため、2番目に支柱の拡張が行われるようにこのようにrsync実行する必要があることです。eval rsync ...

バラより詳しくは、この回答をご覧ください。

関連情報