rsync com caminhos absolutos e excluindo subcaminhos

0

Digamos que eu tenha a seguinte estrutura no caminho 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/...
...
...

Eu gostaria de replicar a estrutura acima em um caminho diferente chamado destination_path , mas somente incluindo os caminhos correspondentes aos diretórios B acima.

Em outras palavras, gostaria de obter o seguinte em destination_path

destination_path/X=1/B/...
destination_path/X=2/B/...
destination_path/X=3/B/...
...

Para esclarecer, algumas dessas estruturas no caminho de destionamento já podem existir (por exemplo, as pastas destination_path/X=* ).

Pelo que entendi, graças ao comentário da @Gilles, os filtros rsync podem ser ótimos para isso. No entanto, nunca os usei antes e é um pouco difícil para mim extrapolar o exemplo fornecido em filtro Rsync: copiando apenas um padrão para minha situação.

Em que ordem devo incluir ou excluir itens no meu caso? E como eu digo ao rsync para usar origin_path e destination_path como caminhos globais? (ao contrário de copiar coisas com caminhos relativos)

    
por Amelio Vazquez-Reina 22.03.2012 / 23:34

1 resposta

2

O seguinte deve fazer o que quiser:

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á aos diretórios de nível superior). A segunda regra inclui tudo em um subdiretório "B". A terceira regra exclui todo o resto. A opção --prune-empty-dirs ignora os diretórios vazios (já que estamos incluindo todos os diretórios com a primeira regra).

    
por 14.05.2012 / 06:50

Tags