短縮版
名前が変更されたリモートディレクトリを同期したいと思います。次のようなもの(動作しません!):
rsync -a '[email protected]:~/.zfs/snashots/$(ls -d Automatic-* | tail -1)/foo' ~/foo
長いバージョン / 背景
インターネットにアクセス可能なハードドライブを持っています(ヘッツナー 収納ボックス) は、定期的に ZFS スナップショットを作成します。ディレクトリ内のスナップショットにアクセスできます/.zfs/snapshots
。スナップショットごとに、次のようなパターンにちなんで名付けられたサブディレクトリがありますAutomatic-<timestamp>
。
$ ls /.zfs/snapshots
Automatic-2021-10-01T00-25-22 Automatic-2021-12-01T00-23-14 Automatic-2022-02-01T00-21-38
これらの各フォルダには、スナップショット作成時のファイルの凍結状態が含まれています。このフォルダにはファイルの最新の「凍結」状態が含まれているため、最新のフォルダの内容を定期的にホーム サーバーにミラーリングしたいと思います。タイムスタンプ パターンは並べ替え可能なので、たとえば次のコマンドで最新のフォルダを照会できます。
$ ls -d Automatic-* | tail -1
Automatic-2022-04-01T00-24-16
rsync に「最新の」リモート ソース ディレクトリを取得する方法を指示する可能性はありますか?
上記の例のコマンド置換は試していませんが、rsync では機能しないと思います。ただし、シンボリック リンク ( ln -s '/path/to/$(ls -d Automatic-* | tail -1)/foo' /target
) を作成しようとしました。ただし、ln
コマンドは作成時にパスを解決しますが、アクセス時には解決しません。
何か案が?
答え1
私のニーズを満たす 1 つの解決策を見つけました。同期の前に必要なフォルダーを照会するスクリプトを作成しました。
#!/bin/bash
LATEST_SNAPSHOT=$(ssh xxx.your-storagebox.de 'ls .zfs/snapshot/' | tail -1)
rsync -a "xxx.your-storagebox.de:.zfs/snapshot/${LATEST_SNAPSHOT}" /target