Copie / faça backup de todos os dirs contendo arquivos correspondentes a um regexp

2

Eu gostaria de fazer um backup no qual eu recursivamente passei por uma estrutura dir e só obtenho diretórios com arquivos cujos nomes correspondam a um regexp específico. Eu gostaria de manter a estrutura de diretórios, de modo que, se houver uma correspondência em

~ / dir1 / dir2 / regexpmatch.txt

cria a mesma estrutura do diretório no destino e o arquivo é copiado para

/media/backup/dir1/dir2/regexpmatch.txt

preferencialmente com rsync, mas se isso não for possível, outro programa faria.

    
por id0 11.08.2012 / 08:50

3 respostas

1

Que tal combinar find com tar ? Um exemplo para encontrar todos os arquivos .c :

find . -type f -name '*.c' -print | tar zcf backup.tar.gz -T -
    
por 11.08.2012 / 13:17
0

Você deve combinar os comandos find e rsync desta maneira:

find . -regex .*X | rsync --files-from=- ./ b/

Exemplo de uso:

$ find b/
b/
b/a
b/a/dX
b/a/cX
$ find a/
a/
a/dX
a/cX
a/b
$ rm -rf b
$ find . -regex .*X | rsync --files-from=- ./ b/
$ find b/
b/
b/a
b/a/dX
b/a/cX

Aqui copio apenas os arquivos que estão em conformidade com a expressão regular .*X .

    
por 25.08.2012 / 13:41
-1

Na página do manual do rsync:

Here s  an  example that copies all .pdf files in a hierarchy, only creating
the necessary destination directories to hold the .pdf  files,  and  ensures
that  any  superfluous  files and directories in the destination are removed
(note the hide filter of non-directories being used instead of an exclude):

rsync -avm --del --include= *.pdf  -f  hide,! */  src/ dest

If you didn t want to remove superfluous destination files, the  more  time-
honored  options  of "--include= */  --exclude= * " would work fine in place
of the hide-filter (if that is more natural to you).
    
por 11.08.2012 / 18:16