Padrão específico de Rsync, mas exclui outros arquivos no mesmo caminho

2

Existem muitos arquivos em /dapp/parsD/parsapp/object . Eu quero apenas rsync dos arquivos neste diretório que correspondem a * .sql , .pl e * .sh , mas eu também deseja excluir dois padrões específicos no mesmo diretório que terminam em .sh .

Isso é possível? Estou executando o HP-UX 11i na origem e no destino. rsync version é 3.1.0 .

O abaixo pode ser mais fácil de visualizar. No servidor dev, o ' x ' ou ' X ' é substituído por ' d ' ou ' D ', e no servidor de produção, será' p 'ou' P '.

Inclua os seguintes arquivos:

/xapp/parsX/parsapp/object/*.sql
/xapp/parsX/parsapp/object/*.pl
/xapp/parsX/parsapp/object/*.sh

Mas exclua os seguintes arquivos:

 /xapp/parsX/parsapp/object/getbackdate*autosys.sh
 /xapp/parsX/parsapp/object/parssendevent*.sh
    
por user64842 10.04.2014 / 05:01

1 resposta

1

As regras de

rsync include / exclude / filter podem ser difíceis de trabalhar, mas são muito flexíveis. Aqui está uma maneira de fazer o que você quer:

rsync --include-from=- /xapp/parsX/parsapp/object/ dest_dir <<EOF
- getbackdate*autosys.sh
- parssendevent*.sh
+ *.sql
+ *.pl
+ *.sh
- *
EOF

O --include-from faz rsync ler os padrões de stdin , sem isso você poderia especificar cada padrão como uma opção --include ou --exclude separada. Você também pode colocar as regras em um arquivo e especificar o nome ou usar -F para fazer com que rsync procure por um arquivo .rsync-filter em cada diretório que lê.

Note também que a ordem dos padrões também é significativa. Os arquivos são incluídos / excluídos de acordo com o primeiro padrão correspondente. Além disso, a regra - * no final é necessária para incluir as regras de trabalho, já que tudo está incluído por padrão. No entanto, isso pode ser problemático com transferências recursivas, uma vez que exclui todos os diretórios não incluídos explicitamente. Uma maneira de contornar isso é incluir uma regra + **/ para incluir todos os diretórios.

    
por 10.04.2014 / 19:08

Tags