可能性1
rsyncのフィルター規則を使用せず、シェル拡張を使用します*実行できます:
a。階層にすべてのbin
ディレクトリを含めるにはtop_dir
:
rsync -av -R top_dir/**/bin/ destination_path
これ-R
は、相対を意味するrsyncパラメータであり、ディレクトリ構造が保持されることを意味します。
**
はシェルグロビングパターンであり、のbin
下に名前が付けられたディレクトリを再帰的に検索しますtop_dir
。上記の例では、コマンドラインは次のように展開されます。
rsync -av -R top_dir/proj1/bin/ top_dir/proj2/bin/ destination_path
b。bin
プロジェクトディレクトリの1レベル下のディレクトリのみを含める場合は、1つだけを使用します*
(「古代の」シェルでも機能します!)。
rsync -av -R top_dir/*/bin/ destination_path
*最新のbashバージョン(> 4)が必要で、を介して再帰的グロビングをアクティブにしshopts -s globstar
ます。zshの再帰グロブデフォルトです。
可能性2
必要なrsyncのフィルタールールのみを使用:
a。階層にすべてのbin
ディレクトリを含めるにはtop_dir
:
rsync -av -m --include='**/' --include='**/bin/**' --exclude='*' top_dir/ destination_path
最初含めるルールは明白ではないかもしれません+が、すべてのディレクトリが(末尾に注意していることを保証/
)検索され、第二は、最終的にすべてのものを追加しbin
たディレクトリと除外ルールは、他のすべてを除外します。-m
空のディレクトリがコピーされないようにします。
b。プロジェクトディレクトリの下の1レベルのみ:
rsync -av -m --include='/*/' --include='/*/bin/***' --exclude='*' top_dir/ destination_path
***
rsync> = 2.6.7の構文を使用します。/
パターンの先頭はを表しますtop_dir
。そうでない場合、パターンはファイルパスの末尾と照合されます。
+検索/some/path/this-file-will-not-be-found
でman rsync