qual é a melhor maneira de espelhar um diretório inteiro, digamos original/
, para um novo diretório, digamos mirror/
, que tem a estrutura mirror/data/
e mirror/tree/
, de modo que
- cada arquivo no diretório
original/
ou em qualquer um de seus subdiretórios está vinculado a um arquivo emmirror/data
- cujo nome de arquivo é um identificador exclusivo de seu conteúdo, digamos, um hash de seu conteúdo, e
- que é vinculado simbolicamente a partir de um ponto
mirror/tree
cujo caminho relativo corresponde ao caminho relativo do arquivo original emoriginal
,
tal que possa ser facilmente restaurado?
esse recurso talvez seja implementado por alguma ferramenta existente? – aquele que permite escolher com flexibilidade o comando para criar um identificador único para um arquivo pelo seu conteúdo.
por exemplo, digamos que haja apenas um arquivo original/something
, que é um arquivo de texto contendo a palavra “dados”. então eu quero executar um script ou comando original
, de modo que o resultado seja:
$ tree original mirror
original
└── something
mirror
├── data
│ └── 6667b2d1aab6a00caa5aee5af8…
└── tree
└── original
└── something -> ../../data/6667b2d1aab6a00caa5aee5af8…
5 directories, 3 files
aqui, o arquivo 667b…
é um link físico original/something
e seu nome de arquivo é hash sha256sum desse arquivo. observe que abreviei o nome do arquivo para maior legibilidade.
quero poder restaurar perfeitamente o original pelo seu espelho.
eu sei que posso escrever um script para fazer isso, mas antes de fazer isso e talvez cometer um erro e perder alguns dados, quero saber se existe alguma ferramenta por aí que já implemente isso com segurança (não encontrei nenhuma, então longe) ou se houver alguma armadilha.
background : quero manter um arquivo de um diretório que rastreia renomeações, mas não preciso de controle de versão. eu sei que git-annex
isso pode ser feito com muita sobrecarga usando repositórios git, mas eu só preciso espelhar o conteúdo de um diretório usando links simbólicos para a estrutura de diretórios para arquivos cujos nomes de arquivos são hashes de seu conteúdo. então eu poderia usar o git-diff para rastrear renomeações. não entendo completamente o que o git-annex está fazendo, então não quero confiar nele para arquivar meus dados. então estou procurando uma alternativa mais leve e menos intrusiva.