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