Não está claro que tipo de pesquisa você deseja. Se você quer que ele funcione em qualquer lugar no unix, em vez de apenas em seu diretório home, e você só quer fazer buscas baseadas em pathname, o esquema a seguir é viável, com um pouco de hacker e usando o padrão locatedb
:
- Cada diretório que contém pelo menos um arquivo marcado precisa de um subdiretório padrão, digamos
.path-tags
; - Cada arquivo no diretório $ FILE com o link $ TAG (que não deve conter o char
_
) tem um link$TAG_$FILE -> ../$FILE
Deixo os detalhes do script locate-tag
para você; deve ser um dois ou três liner, usando apenas o comando locate
e hackery de shell. (Se você estiver interessado, eu poderia escrever um).
Alguns dos caras do KDE falaram sobre esse tipo de esquema para metadados, embora eu não me lembre dos detalhes.
Também deve ser possível fazer testes mais sofisticados e de exame de conteúdo com base nesse esquema, com um script semelhante em torno de find
.
Pensamentos sobre requisitos atualizados
- qualquer arquivo legível pelo usuário pode ser marcado livremente - Sim, não deve haver problema
- um usuário pode pesquisar por arquivos que correspondam a uma ou várias tags - Da mesma forma
-
arquivos podem ser movidos sem perder as tags associadas anteriormente - Os diretórios que eles habitam podem ser movidos livremente, mas se o arquivo for movido do diretório, estamos com problemas. Se as tags tivessem o formato
$TAG_$INODE_$FILE
e tivéssemos uma maneira eficiente de descobrir quais caminhos têm um determinado inode , então podemos fazer isso, perdendo tags apenas se sairmos dos sistemas de arquivos. Copiar arquivos pode causar alguns problemas, e isso é claramente mais complicado do que minha sugestão original. - o sistema pode ser facilmente armazenado em backup - não é essencialmente difícil.
- sem dependências em qualquer ambiente de desktop - nenhum
- Se algum gui estiver envolvido, deve haver um cli fallback - é onde vivemos!
Postscript O arquivo "reverse-inode-lookup" descrito pelo link (2) você me mostrou em sua resposta para (1) pode ser usado para fornecer alguma infraestrutura adicional. Podemos executar um serviço no arquivo de pesquisa inversa, que verifica se cada inode fornecido no nome do arquivo de uma tag corresponde ao inode do arquivo (se houver algum) ao qual o tag aponta. Se não houver correspondência, a cirurgia necessária pode ser executada (o inode ainda existe? Onde está?) E o arquivo de pesquisa inversa está sendo mutado ou regenerado e os links simbólicos da tag sendo atualizados.
Eu antecipo um caso complicado: e se o arquivo marcado não estiver onde as tags dizem que deveria ser, o arquivo de pesquisa reversa diz que ele ainda existe, mas o arquivo pródigo não é onde o arquivo de pesquisa diz, é o arquivo de pesquisa estando desatualizado? Existem algumas maneiras de lidar com este caso, nenhuma obviamente ideal. Além disso, toda essa tarefa parece ser o tipo de coisa que Perl é bem adequado para ...