rsync regras do arquivo de filtro para o subcaminho

3

Eu tenho um grande problema em entender as regras de filtro do rsync para o sub-caminho. Eu tenho esta árvore de diretórios:

|-- index.php
|-- other-file-php.php
|-- filesource.php
|   |-- album1
|   |   |-- firstphoto.jpg
|   |   |-- second.jpg
|   |   |-- index.php
|   |   '-- thumbs
|   |       |-- _map.txt
|   |       |-- _title_ciao.jpg.txt
|   |       |-- _120_second.jpg
|   |       |-- _dir_album1.jpg
|   |       '-- _300_second.jpg
|   |-- altre
|   |   |-- img_1172.jpg
|   |   |-- album2
|   |   |   |-- index.php
|   |   |   '-- thumbs
|   |   |       |-- _title_img_1172.jpg.txt
|   |   |       |-- _dir_album2.jpg
|   |   |       '-- _guestbook.html

Eu só posso usar a opção -f -filter do rsync, porque devo escrever todas as regras em um arquivo. Nesta árvore existem diferentes tipos de arquivos que podem estar em qualquer nível da árvore. Eu quero:

  1. tem um backup completo da estrutura de diretórios
  2. backup de todos os arquivos do tipo .php , .txt , .html
  3. backup .jpg arquivos que não começam com _
  4. backup .jpg arquivos que começam com _dir
por StefanoCudini 05.08.2012 / 02:04

3 respostas

2

Para resolver seus pontos:

  1. Isso significa apenas que todas as regras de exclusão que você especificar devem ser arquivos e não diretórios. Como o rsync não faz distinção no tipo, você precisa ter cuidado com suas regras (e com as convenções de nomenclatura de arquivos).
  2. Uso:

    + **/*.php
    + **/*.txt
    + **/*.html
    
  3. Uso:

    + **/*.jpg
    - **/_*.jpg
    
  4. Não tenho ideia do que você quer dizer.

por 05.08.2012 / 03:29
3

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
...
    
por 05.08.2012 / 06:27
-1

O melhor para você é fazer o arquivo que você usará com a opção: --files-from usando o comando find, assim:

cd dirtobackup;find . |egrep '\.php$|\.txt$|\.html$|^[^_].*\.jpg$|^_dir.*\.jpg$' >/tmp/files_tobackup
rsync --files-from=/tmp/files_tobackup dirtubackup dst
    
por 05.08.2012 / 03:14