Coloque as seguintes linhas em filter.txt
:
+ */
+ *.php
+ *.txt
+ *.html
+ **/_dir*.jpg
- **/_*.jpg
+ *.jpg
- *
Em seguida, execute rsync
da seguinte forma:
rsync -a --include-from=filter.txt /path/to/source/ /path/to/dest
Explicação de filter.txt
:
Em primeiro lugar, observe que a ordenação das regras de filtragem é muito importante, pois rsync
as avalia em ordem e aplica a primeira regra que corresponde a .
Por padrão, rsync
inclui todos os arquivos que não são explicitamente excluídos, portanto, a regra final em filter.txt
é excluir tudo o que não foi explicitamente incluído pelas regras anteriores. A primeira regra inclui todos os diretórios (conforme indicado pelo trailing /
), que deve cuidar da sua condição # 1. As regras de 2 a 4 tratam arquivos php, txt e html, respectivamente, enquanto as regras de 5 a 7 permitem que todos os arquivos jpg iniciem com _dir
ou não iniciem com _
.
(As regras 5 e 6 têm o prefixo **
para ancorar as regras curinga ao início de uma parte do nome do arquivo em qualquer profundidade de diretório . Sem o prefixo **
, essas regras corresponde apenas ao diretório de origem de nível superior.)
Nota final: Se você não conseguir (por algum motivo) usar --include-from
, deverá poder especificar as regras de filtragem como uma série de -f
opções na linha de comando.
EDITAR
Para usar filter.txt
em rsnapshot
, você pode especificá-lo em rsnapshot.conf
por meio do parâmetro include_file
, da seguinte maneira:
include_file /path/to/filter.txt
EDIT # 2
Se você precisar usar um conjunto diferente de filtros para cada backup, poderá usar outro include_file
para cada backup
linha no seu rsnapshot.conf
, por exemplo:
...
backup /path/to/src1/ dest1/ include_file=/path/to/src1_filter.txt
backup /path/to/src2/ dest2/ include_file=/path/to/src2_filter.txt
...