私のパスに次のような構造があるとしましょう。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_path
にdestination_path
グローバルパスを使用するように指示しますか? (相対パスにコンテンツをコピーする代わりに)
答え1
次は必要な作業を行う必要があります。
rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/
最初のルールにはすべてのディレクトリが含まれます(そうしないと、rsyncは最上位ディレクトリにドロップダウンされません)。 2番目のルールには、「B」サブディレクトリのすべてのエントリが含まれます。 3番目のルールは他のすべてを除外します。この--prune-empty-dirs
オプションは空のディレクトリを無視します(すべてのディレクトリを含めるために最初のルールを使用したため)。