Possibilidade 1
Não usando as regras de filtragem do rsync, mas a expansão do shell * que você pode fazer:
a. Para incluir todos os bin
dirs na hierarquia top_dir
:
rsync -av -R top_dir/**/bin/ destination_path
Aqui -R
é um parâmetro rsync que representa relativo e significa que a estrutura de diretórios é preservada.
**
é um padrão de globalização de shell e procura recursivamente por diretórios denominados bin
em top_dir
. Então, com você acima do exemplo, a linha de comando é expandida para:
rsync -av -R top_dir/proj1/bin/ top_dir/proj2/bin/ destination_path
b. Se você quiser incluir apenas bin
dirs um nível abaixo do diretório do projeto, use apenas um único *
(que também funciona com shells "antigos"):
rsync -av -R top_dir/*/bin/ destination_path
* Você precisa de uma versão recente do bash (> 4) e ativar a globalização recursiva via shopts -s globstar
. Com zsh a globalização recursiva é o padrão.
Possibilidade 2
Apenas usando as regras de filtragem do rsync, você precisa:
a. Para incluir todos os bin
dirs na hierarquia top_dir
:
rsync -av -m --include='**/' --include='**/bin/**' --exclude='*' top_dir/ destination_path
A primeira regra de inclusão pode não ser óbvia + , mas garante que todos os diretórios (observe o /
à direita) são pesquisados, o segundo finalmente inclui tudo em bin
diretórios e a regra de exclusão exclui tudo mais. -m
garante que os diretórios vazios não sejam copiados.
b. Apenas um nível abaixo do diretório do projeto:
rsync -av -m --include='/*/' --include='/*/bin/***' --exclude='*' top_dir/ destination_path
Usando a sintaxe ***
do rsync > = 2.6.7. O /
inicial nos padrões representa top_dir
, caso contrário, os padrões são comparados com o fim do caminho do arquivo.
+ Pesquise /some/path/this-file-will-not-be-found
em man rsync