Restic: Permitir a combinação de padrões de inclusão e exclusão para backup e restauração

Criado em 18 jul. 2015  ·  17Comentários  ·  Fonte: restic/restic

Este é um problema de acompanhamento para # 226. Até agora, só é possível especificar padrões de exclusão para backup e restauração.

Existem casos de uso que não são cobertos, por exemplo: Um usuário gostaria de fazer backup de seu diretório pessoal em /home/user , excluindo qualquer coisa do diretório work exceto os arquivos de origem C.

Há algum outro uso que eu não tenha pensado?

Implementação / Interface do usuário: Permite especificar os padrões --include e --exclude na linha de comando, que preenchem uma lista comum (a ordem é importante aqui). Para cada diretório / arquivo, verifique todos os padrões na lista. A ação (excluir ou incluir) do último padrão de correspondência vence. A ação padrão (que também será usada se os padrões de inclusão ou exclusão não forem especificados) é "incluir".

Isso já contém um caso: o repouso deve andar /home/user/work ?

Eu acho que não deveria. Em vez disso, se este for um comportamento desejável, exija que o usuário adicione um padrão mais específico para sinalizar que o diretório excluído também deve ser percorrido, por exemplo, restic backup --exclude /home/user/work --include /home/user/work/**/*c. /home/user .

Uma interface de usuário melhor seria permitir a especificação de um arquivo para ler os padrões ( --pattern-file ou algo parecido). Neste arquivo, todas as linhas que começam com # são comentários, as linhas vazias são ignoradas, todas as outras linhas devem começar com + (incluir) ou - (excluir) após um espaço personagem e um padrão. Para o caso de uso acima, um arquivo de filtro seria assim:

# filter out everything from work, but include c source code files
- /home/user/work
+ /home/user/work/**/*.c

Esse problema pode ser resolvido assim que uma solução definitiva para ter padrões de inclusão e exclusão seja implementada.

backup restore feature enhancement

Comentários muito úteis

Por que não usar apenas o formato padrão para ignorar que .gitignore usa? por exemplo.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

Todos 17 comentários

Outra possibilidade seria ler uma lista exata de arquivos para backup de um arquivo (ou de stdin). Então, as pessoas podem simplesmente usar as ferramentas que quiserem (find, grep, etc.) para construir sua lista e "canalizar" essa lista para restabelecê-la.

Devo ler todo o texto antes de postar uma resposta. Desculpa.

Este é um problema diferente, levando a lista de arquivos / diretórios para backup de stdin em vez de argumentos de linha de comando. Você acha que é valioso ter isso? Se sim, você poderia adicionar um problema?

Apenas um lembrete para mim: este problema é sobre incluir filtros para backup, restaurar já os tem.

Você deveria talvez apenas copiar a sintaxe --exclude / - include / - exclude-from do rsync, eles têm 20 anos de experiência :-)
(pelo menos, adicione alguns exemplos da sintaxe atual ao guia do usuário, pois não está claro se "/ foo" e "foo" são iguais ou se "* .c" é compatível.

Ah, obrigado pelo comentário, adicionei um problema para os exemplos ausentes no manual: https://github.com/restic/restic/issues/396

Para ser honesto, não gosto da sintaxe de filtro do rsync, porque as regras são muito complexas. Mas veremos o que podemos fazer.

Alguma atualização? É definitivamente uma opção obrigatória. Atualmente, nem mesmo é possível ler a lista de arquivos para fazer backup do stdin:

$ find -name '*.go' | restic backup --files-from -
open -: no such file or directory

considerando que poderia ser escrito como

restic backup --exclude '*' --include '*.go'

Uhm, a leitura da lista de arquivos do stdin pode ser obtida chamando o restic da seguinte maneira:

$ find -name '*.go' | restic backup --files-from /dev/stdin

Se você quiser, eu aceitaria um PR que adiciona manipulação - para --files-from . :)

@opennota , você se importaria de descrever seu caso de uso? Seria interessante para nós.

O problema do traço ( - ) é rastreado como # 769.

@ fd0
Não é muito um caso de uso. Eu só quero fazer backup apenas dos arquivos com certas extensões, sem usar um arquivo temporário para a lista.

Se você quiser, eu aceitaria um PR que adiciona manipulação - para --files-from. :)

Verei o que posso fazer.

Você pode simular esse comportamento usando sed e canais nomeados:

restic --exclude-file <(sed -n 's/^- \(.*\)/\1/p' files.list) --files-from <(sed -n 's/^+ \(.*\)/\1/p' files.list)

Linhas começando com - são excluídas e aquelas com + são incluídas.

Acho que um bom modelo é o que o borg implementou recentemente para --pattern e --patterns-from
https://borgbackup.readthedocs.io/en/stable/usage/help.html#borg -help-patterns
Não tanto os seletores de estilo diferentes, mas as opções para especificar caminhos raiz, incluir regras, regras de exclusão e regras de exclusão não recursiva em um arquivo.

Por que não usar apenas o formato padrão para ignorar que .gitignore usa? por exemplo.

# ignore everything
*
# include $HOME/.local
!$HOME/.local

O --include está programado para ser implementado?

Soar como --include e --exclude não podem ser implementados juntos, ou pelo menos seria uma hierarquia de precedência com um no outro ...

Fornecer uma lista de arquivos com --files-from não resolve totalmente o problema, pois o subcomando snapshots exibirá uma lista gigantesca de arquivos e o subcomando forget não funciona como esperado.

Meu caso de uso é fazer backup da minha casa e tenho uma lista de caminhos com algumas exclusões e algumas exceções para a exclusão. A lista básica de caminhos já contém uma centena de itens. Como tudo está abaixo de $HOME , eu esperaria ser capaz de dizer algo como --exclude=** --include=~/path1 --include=~/path2 --exclude=~/path2/something --exclude=*~ . Portanto, para determinar se um caminho deve ser incluído, ele deve ser comparado a cada --exclude e --include na ordem certa e as últimas vitórias correspondentes.

Acho que o RP de @vincentbernat é uma solução eficaz para esse requisito.

_Resumo: Permitir que padrões negativos no estilo gitignore especifiquem regras de exclusão para backup e restauração._

Estou usando-o de forma eficaz há várias semanas.

Notavelmente, isso me permite simplificar minha listagem de instantâneos, que era bastante prolixa anteriormente:

b951f6a2  2019-06-15 11:30:18  elvandar    manual      /Users/daniel/Desktop
                                                       /Users/daniel/Documents
                                                       <lots more...>

para:

d0c0bed1  2019-06-18 08:20:57  elvandar                /Users/daniel

Além disso, implementei uma solução eficaz (não perfeita, mas funcionando) fornecendo backup contínuo usando esse recurso (compartilharemos os detalhes em breve).

Esta página foi útil?
0 / 5 - 0 avaliações