絶対パスとサブパスを除外した rsync

絶対パスとサブパスを除外した rsync

パス上に次の構造があるとしますorigin_path

origin_path/X=1/A/...
origin_path/X=1/B/...
origin_path/X=1/C/...
...
origin_path/X=2/A/...
origin_path/X=2/B/...
origin_path/X=2/C/...
...
...

上記の構造を という別のパスに複製したいのです destination_pathが、のみディレクトリに対応するパスを含むBその上。

つまり、私は次のことをしたいのですdestination_path

destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...

明確に言えば、宛先パス内のこの構造の一部はすでに存在している可能性があります (例: フォルダーdestination_path/X=*)。

@Gilles のコメントのおかげで、私が理解しているところによると、rsyncフィルターはこれにぴったりかもしれません。しかし、私はこれまでフィルターを使ったことがないので、提供されている例を推測するのは少し難しいです。Rsync フィルター: 1 つのパターンのみをコピーする私の状況に。

私の場合、どのような順序で含めたり除外したりすればよいでしょうか? また、rsync にorigin_pathと をdestination_pathグローバル パスとして使用するように指示するにはどうすればよいでしょうか? (相対パスでコピーするのではなく)

答え1

次のようにすれば、必要な処理が実行されるはずです。

rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/

最初のルールにはすべてのディレクトリが含まれます (そうでない場合、rsync は最上位のディレクトリまで降りません)。2 番目のルールには、「B」サブディレクトリ内のすべてのものが含まれます。3 番目のルールは、他のすべてを除外します。この--prune-empty-dirsオプションは、空のディレクトリを無視します (最初のルールですべてのディレクトリを含めるため)。

関連情報