絶対パスを使用した 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のですがただディレクトリに対応するパスが含まれています。第二以上。

つまり、次のような情報を取得したいと思います。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_pathdestination_pathグローバルパスを使用するように指示しますか? (相対パスにコンテンツをコピーする代わりに)

ベストアンサー1

次は必要な作業を行う必要があります。

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

最初のルールにはすべてのディレクトリが含まれます(そうしないと、rsyncは最上位ディレクトリにドロップダウンされません)。 2番目のルールには、「B」サブディレクトリのすべてのエントリが含まれます。 3番目のルールは他のすべてを除外します。この--prune-empty-dirsオプションは空のディレクトリを無視します(すべてのディレクトリを含めるために最初のルールを使用したため)。

おすすめ記事