可能性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