
Digamos que eu tenha a seguinte estrutura no caminhoorigin_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/...
...
...
Eu gostaria de replicar a estrutura acima em um caminho diferente chamado destination_path
, masapenasincluindo os caminhos correspondentes aos diretóriosBacima.
Em outras palavras, eu gostaria de obter o seguinte emdestination_path
destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...
Para esclarecer, parte dessa estrutura no caminho de destino já pode existir (por exemplo, as pastas destination_path/X=*
).
Pelo que entendi, graças ao comentário de @Gilles, rsync
os filtros podem ser uma ótima opção para isso. No entanto, nunca os usei antes e é um pouco difícil extrapolar o exemplo fornecido emFiltro Rsync: copiando apenas um padrãopara a minha situação.
Em que ordem devo incluir ou excluir coisas no meu caso? E como digo ao rsync para usar origin_path
e destination_path
como caminhos globais? (em vez de copiar coisas com caminhos relativos)
Responder1
O seguinte deve fazer o que você deseja:
rsync --recursive --prune-empty-dirs --include '*/' --include '*/B/**' --exclude '**' origin_path/ destination_path/
A primeira regra inclui todos os diretórios (caso contrário, o rsync não descerá para os diretórios de nível superior). A segunda regra inclui tudo em subdiretórios “B”. A terceira regra exclui todo o resto. A --prune-empty-dirs
opção ignora diretórios vazios (já que incluímos todos os diretórios na primeira regra).