sshを介したrsyncとディレクトリ構造を維持しながらbashで複数のワイルドカードを使用する

sshを介したrsyncとディレクトリ構造を維持しながらbashで複数のワイルドカードを使用する

リモートサーバーには、次のファイルのいくつかがリストされている同様のディレクトリ構造があります。

/logs/service::A1/20210730T120000/log.log
/logs/service::A1/20210729T120000/log.log
/logs/service::A2/20210730T120000/log.log
/logs/service::B0/20210730T120000/log.log

serviceAのすべてのファイルにアクセスするには、rsync単一のワイルドカードを使用して次のコマンドを実行します。*

rsync -av <remote-server>:/logs/service::A* <destination>

これは期待どおりに機能し、ターゲットから次のディレクトリ構造を取得します。

<destination>/service::A1/20210730T120000/log.log
<destination>/service::A1/20210729T120000/log.log
<destination>/service::A2/20210730T120000/log.log

rsyncしかし、serviceAのすべてのファイルが必要な場合特定の日から始めて、次の2番目のワイルドカードが必要です。 rsync -arv <remote-server>:/logs/service::A*/20210730* <destination>

ただし、これにより最上位ディレクトリが失われ、ターゲットに次の構造が提供されます。

<destination>/20210730T120000/log.log
<destination>/20210730T120000/log.log

私はまだservice::<xx>目的地レベルが欲しい。これを達成する方法はフラグを使用するようです--include/--exclude

しかし、私は次のことを試しました。ここしかし、ファイルが見つかりません。

rsync -av --include='service::A**/20210730**' --exclude='*' <remote-server>:/logs/ <destination>

receiving incremental file list
./

答え1

/service::A*/20210730*/***/包含パターンと除外パターンの組み合わせを使用したい可能性が高いです*。実際に転送されたファイルを保持するために必要なディレクトリ構造のみを生成するために-m()を含めることもできます。--prune-empty-dirs

rsync -avm \
    --include='/service::A*/20210730*/**' \
    --include='*/' \
    --exclude='*' \
    remote:/logs/ local-path/logs

転送のファイルの一覧表示手順中に、すべてのディレクトリ(インクルードパターンのため)と最初のパターンに一致するすべてのファイルとディレクトリを/logs含む、リモートホストにルートを持つ階層全体を巡回しますが、他は除外します。*/その後、ディレクトリとファイルのパス名のリストは、実際に転送が開始される前に空のディレクトリ(「空」は「インクルードパターンに一致するファイルを含まない」という意味)で削除されます。

*/rsync一致するディレクトリなどの入力を許可するには、パターンが必要です。/service::A*それ以外の場合は、除外パターンが原因でこれは不可能です*


上記のソリューションでは、以下のすべての項目を完全にナビゲートする必要があるため、/logsファイル階層が大きいと速度が遅くなる可能性があります。

そうであれば、インクルードモードでより選択的に作業を高速化できます。

rsync -avm \
    --include='/service::A*/' \
    --include='/service::A*/20210730*/***' \
    --exclude='*' \
    remote:/logs/ local-path/logs

これはrsync、一致するディレクトリを入力することを明示的に許可します/service::A*/。次に、他のすべてを除いて、興味のあるすべてのタイムスタンプディレクトリを含めます。

同様のパターンは、ディレクトリ自体も含むという点で電子とはdir/***異なります。dir/**dir

関連情報