リモートの「動的」ディレクトリへの SSH アクセス

リモートの「動的」ディレクトリへの SSH アクセス

短縮版

名前が変更されたリモートディレクトリを同期したいと思います。次のようなもの(動作しません!):

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

関連情報