Atualmente borg prune
só pode restringir os arquivos a serem removidos por um prefixo comum. Isso funciona para esquemas de nomenclatura onde a parte "relevante para a poda" dos nomes dos arquivos está na frente, por exemplo, system-<hostname>-<date>
e userdata-<hostname>-<date>
, mas realmente não funciona para mais nada.
Adicionar tags, ou seja, uma lista de strings arbitrárias (excluindo "," que seria o separador de tags) ajudaria. "prune" e outros comandos usando "--prefix" obteriam uma opção "--tags", e apenas os arquivos que têm _todos_ (ou _qualquer_, discussão) as tags listadas seriam afetados (e eles deveriam ser imutáveis por este motivo).
EDIT: abordagem diferente, talvez, sem campos de metadados extras, aplicável para trás .
Os nomes já estão lá. Poderíamos apenas adicionar algo como --tags some,tags
(sempre usar ,
como delimitador aqui?) E --tag-delim -
(qual delimitador é o padrão?).
tags = set(args.tags.split(args.tag_delim))
for archive in ...:
if set(archive.name.split(args.tag_delim)) <= tags:
... # prune
Misturar nomes e tags parece sujo. As tags podem ser metadados de arquivo separados.
Bom ponto, mas não tenho certeza se isso não está certo aqui (como uma decisão de design). # 866 me fez pensar "Hm, para que _é_ o nome do arquivo realmente serve?". "Reciclar" para etiquetagem não é uma coisa muito limpa de se fazer, mas parece bastante prático para mim (se for 100% opt-in explícito). De certa forma, "tags" seria apenas uma maneira diferente de ver o campo "nome".
Eu gostaria de superar esta solicitação de recurso para tags / aliases.
Depois de passar tanto tempo no universo git, me vejo desejando poder aplicar tags adicionais a arquivos borg específicos.
A incorporação de tags no nome do arquivo é atualmente possível, mas é bastante indisciplinado quando você deseja usar várias tags para um arquivo. Por exemplo, já uso o nome do arquivo para incorporar o nome do host, o carimbo de data / hora e um ou dois outros campos. Também quero adicionar outras tags, como "@latest" e "@ release-1". Isso fica confuso rapidamente. Pior, às vezes quero mover uma tag como @latest de um arquivo para outro.
Se você estiver usando o borg apenas para fazer backup de arquivos (garantido, sua missão original), provavelmente não haverá muita necessidade de tags. Mas se, como eu, você descobriu que a desduplicação do borg é extremamente útil em outras situações, como arquivar arquivos muito grandes usados em um pipeline de análise de dados :-), então a capacidade de atribuir várias tags a um arquivo existente se torna muito importante.
Atualmente, minha solução é criar o arquivo original com o esquema de nomenclatura que desenvolvi e, em seguida, criar imediatamente vários arquivos adicionais com nomes que começam com "@" - @latest , @ v1.0, @ beta2 , etc. Cada um desses arquivos adicionais leva alguns minutos para digitalizar / criar e adiciona apenas algumas centenas de bytes ao repositório, uma vez que o conteúdo é completamente idêntico ao arquivo original. (Bem, contanto que os arquivos não tenham mudado nesses poucos minutos.)
Seria muito bom eliminar essa lentidão adicionando metadados de tag.
Eu imagino a IU sendo algo assim:
Crie uma nova tag e aponte-a para um arquivo existente:
borg tag [repo::archive-name] [tag1] [tag2] ...
Liste todas as tags e os arquivos para os quais elas apontam
borg tag --list [repo]
A exclusão de tags pode reutilizar o comando borg delete
ou também pode ser uma opção de comando:
borg tag -d [repo] [tagname]
Obrigado por considerar isso!
Só comecei a experimentar o borg recentemente, mas queria marcar com +1 a ideia de marcação. Posso ver um caso de uso relevante para backups em que tags são usadas para definir em qual dos vários serviços de nuvem um arquivo é feito o backup. Eu imagino (com base em outras discussões) que o backup na nuvem provavelmente seria por meio de uma ferramenta separada que pega nas tags e, por exemplo, lida com a criação de um arquivo * .tgz para ser carregado. (Você pode até adicionar frequência de backup como uma tag detectável separada, mas esse tipo de coisa estaria dentro do escopo da ferramenta de backup, e não do próprio borg.)
Consulte o problema nº 2300 para uma possível implementação de tag. Atualmente é mais parecido com git tag
que com rótulos do Gmail - em outras palavras, podem existir aliases adicionais para um arquivo, mas eles precisam ser exclusivos. Pode não ser difícil mesclar essa ideia com o que é discutido aqui - rótulos aplicados a vários arquivos.
Comentários muito úteis
Eu gostaria de superar esta solicitação de recurso para tags / aliases.
Depois de passar tanto tempo no universo git, me vejo desejando poder aplicar tags adicionais a arquivos borg específicos.
A incorporação de tags no nome do arquivo é atualmente possível, mas é bastante indisciplinado quando você deseja usar várias tags para um arquivo. Por exemplo, já uso o nome do arquivo para incorporar o nome do host, o carimbo de data / hora e um ou dois outros campos. Também quero adicionar outras tags, como "@latest" e "@ release-1". Isso fica confuso rapidamente. Pior, às vezes quero mover uma tag como @latest de um arquivo para outro.
Se você estiver usando o borg apenas para fazer backup de arquivos (garantido, sua missão original), provavelmente não haverá muita necessidade de tags. Mas se, como eu, você descobriu que a desduplicação do borg é extremamente útil em outras situações, como arquivar arquivos muito grandes usados em um pipeline de análise de dados :-), então a capacidade de atribuir várias tags a um arquivo existente se torna muito importante.
Atualmente, minha solução é criar o arquivo original com o esquema de nomenclatura que desenvolvi e, em seguida, criar imediatamente vários arquivos adicionais com nomes que começam com "@" - @latest , @ v1.0, @ beta2 , etc. Cada um desses arquivos adicionais leva alguns minutos para digitalizar / criar e adiciona apenas algumas centenas de bytes ao repositório, uma vez que o conteúdo é completamente idêntico ao arquivo original. (Bem, contanto que os arquivos não tenham mudado nesses poucos minutos.)
Seria muito bom eliminar essa lentidão adicionando metadados de tag.
Eu imagino a IU sendo algo assim:
Crie uma nova tag e aponte-a para um arquivo existente:
borg tag [repo::archive-name] [tag1] [tag2] ...
Liste todas as tags e os arquivos para os quais elas apontam
borg tag --list [repo]
A exclusão de tags pode reutilizar o comando
borg delete
ou também pode ser uma opção de comando:borg tag -d [repo] [tagname]
Obrigado por considerar isso!