Estive procurando uma maneira de marcar meus arquivos e pesquisá-los / filtrá-los com base nessas tags.
Aqui estão meus requisitos ( atualizados ):
- qualquer arquivo legível pelo usuário pode ser marcado livremente
- um usuário pode procurar arquivos correspondentes a uma ou várias tags
- arquivos podem ser movidos sem perder as tags associadas anteriormente
- o backup do sistema pode ser feito facilmente
- sem dependências em qualquer ambiente de desktop
- se alguma GUI estiver envolvida, deve haver um fallback de CLI
Eu estava esperando por algum sistema básico de arquivos e hackers do coreutils para lidar com isso, mas ainda não pensei nisso o suficiente.
Enquanto isso, vou revisar o beagle e o metatracker, mencionados aqui, e ver como eles se saem.
Ok, então o beagle tem enormes dependências de gnomos, e o tracker é bom, mas ainda tem algumas dependências que eu não gosto ...
Estive pesquisando um pouco mais e o caminho a percorrer poderia muito bem ser atributos de arquivo estendidos .
Essa é uma solução nativa para os sistemas de arquivos mais recentes, mas eles ainda não são muito bem suportados (a maioria dos coreutils os destrói por padrão, o cp, por exemplo, precisa do sinalizador -a para preservá-los). Gostaria de ouvir alguns pensamentos sobre como usá-los enquanto eu mesmo experimento alguns hacks, mesmo que isso justifique uma nova pergunta.
fonte
Respostas:
Não está claro que tipo de pesquisa você deseja. Se você deseja que ele funcione em qualquer lugar do unix, e não apenas no seu diretório pessoal, e você deseja apenas fazer pesquisas com base no nome do caminho, o seguinte esquema é viável, com um pouco de hackeamento de shell e usando o padrão
locatedb
:.path-tags
;_
) possui um link$TAG_$FILE -> ../$FILE
Deixo os detalhes do
locate-tag
script para você; deve ser de duas ou três linhas, usando apenas olocate
hackery de comando e shell. (Se você estiver interessado, eu poderia escrever um).Alguns membros do KDE conversaram sobre esse tipo de esquema de metadados, embora eu não me lembre dos detalhes.
Também deve ser possível fazer testes mais sofisticados para examinar o conteúdo com base nesse esquema, com um script semelhante
find
.Reflexões sobre requisitos atualizados
$TAG_$INODE_$FILE
tiverem o formato e tivermos uma maneira eficiente de descobrir quais caminhos têm um determinado inode , podemos fazer isso, perdendo as tags apenas se sairmos dos sistemas de arquivos. A cópia de arquivos pode causar alguns problemas, e isso é claramente mais complicado do que minha sugestão original.Postscript O arquivo "pesquisa de inode reversa" descrito pelo link (2) que você me mostrou em sua resposta a (1) pode ser usado para fornecer uma 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) para o qual a tag aponta. Se não houver correspondência, a cirurgia necessária poderá ser executada (o inode ainda existe? Onde está?), E o arquivo de pesquisa inversa será mutado ou regenerado e os links simbólicos da tag serão atualizados.
Antecipo um caso complicado: e se o arquivo marcado não estiver onde as tags dizem que deveria estar, o arquivo de pesquisa inversa diz que ainda existe, mas o arquivo pródigo não está onde o arquivo de pesquisa diz que está, o arquivo de pesquisa está fora de encontro? Existem algumas maneiras de lidar com esse caso, nenhuma obviamente ideal. Além disso, toda essa tarefa parece ser o tipo de coisa para a qual Perl é adequado ...
fonte
Acabei de lançar um alfa do meu novo programa que tenta fornecer essa funcionalidade. Atualmente, ele atende a alguns dos requisitos, mas não a todos. De qualquer maneira, pode ser do seu interesse. Ele fornece uma ferramenta de linha de comando para marcação e um sistema de arquivos virtual para navegação (onde as tags são representadas por diretórios).
http://www.tmsu.org/
Sim.
Sim. Através da ferramenta de linha de comando ou navegando nos diretórios de tags no sistema de arquivos virtual.
Não. No entanto, o aplicativo armazena impressões digitais dos arquivos marcados que são usados para ajudar a identificar arquivos movidos. É fornecido um comando 'repair' que atualizará os caminhos dos arquivos movidos. (Obviamente, esse mecanismo falha se um arquivo for movido e modificado.)
Sim. É um simples arquivo de banco de dados do Sqlite 3.
Sim. Sem dependências e, como pode ser executado como um sistema de arquivos virtual, está disponível para leitura como um sistema de arquivos em qualquer programa que suporte links simbólicos.
Nenhuma GUI no momento.
fonte
mv
,cp
erm
que lidar com suas tags, bem como (chamá-los, por exemplotmv
,tcp
etrm
) então não perderia etiquetas pelo menos se se usa a linha de comando para mover arquivos ...tmsu-fs-mv
,tmsu-fs-rm
etmsu-fs-merge
.Eu acho que isso pode atender a todos os seus requisitos. De qualquer forma, é um código legal:
http://pages.stern.nyu.edu/~marriaga/software/oyepa
A GUI requer Qt, mas há um aplicativo de linha de comando para pesquisa e o fato de todas as tags estarem no nome do arquivo torna trivial manipular os tags | files do CLI.
fonte
Ninguém mencionou, mas você definitivamente deve considerar os atributos estendidos do sistema de arquivos. ext4, por exemplo, os possui. existem ferramentas getfattr e setfattr para lidar com elas. Claro que você terá que escrever alguns scripts de shell para procurar arquivos marcados com sometag. Em relação às perguntas mencionadas, todas as respostas são "Sim". Você só deve levar em consideração que depende do sistema de arquivos.
fonte
Surpreso que ninguém tenha mencionado o TagSpaces . Ele atende a todos os seus requisitos, pois as tags são armazenadas no nome do arquivo e o TagSpaces é multiplataforma.
fonte
Você provavelmente não precisa instalar toda a área de trabalho do KDE para a sua biblioteca de tags, Nepomuk. Você ainda teria que instalar as bibliotecas base do KDE, embora ...
fonte
Este artigo recente do Linux Desktop Search Tools menciona que o Tracker suporta a marcação. Infelizmente, ele deve estar meio quebrado na versão antiga que eles testaram. Talvez esteja consertado agora?
fonte
Tente o Beagle . Eu acho que é muito bom.
Pode não atender a todos os requisitos e não sei ao certo o que poderia. Por exemplo, os arquivos FIFO suportam atributos estendidos? Caso contrário, o Beagle possui um banco de dados de fallback.
fonte
Algumas outras alternativas podem ser tagasistant , tagfs ou dantalian .
fonte
Portanto, você não encontrará a integração do Nepomuk no gnome, na linha de comando ou em qualquer outro lugar do Linux.
Por outro lado, com o Tracker, você não encontrará a integração AFAIK do kde. Não tenho certeza sobre a CLI.
Infelizmente, a resposta parece ser "não".
Ainda mais infelizmente, isso não significa que há aqui uma boa oportunidade para a construção de uma. Os utilitários de linha de comando do Linux não têm muito em comum com o gerenciador de arquivos da GUI, por exemplo, portanto, arquiteturalmente, não há componentes comuns que possam ser estendidos para suportar o conceito.
fonte
Fiz um pequeno programa que usa SQLite para esse fim. Isso resolveu minha necessidade, mas talvez também ajude você:
https://github.com/alvatar/dfym
O único problema dessa abordagem é que não é sincronizado com movimentações e exclusões, mas resolve o problema de arquivos relativamente estáticos.
fonte
TMSU
Surpreendido, ninguém o mencionou.
fonte
Eu sugiro dar uma olhada em um sistema de controle de versão como o Subversion para esses tipos de recursos acima e além do sistema de arquivos. Alguns podem ser melhores para você do que outros, mas geralmente:
Um exemplo cli com o Subversion:
~/svn/atestrepository: $ svn propset mytag "something" dir1 property 'mytag' set on 'dir1' $ svn propset myothertag "nothing" dir1/file1 property 'myothertag' set on 'dir1/file1' $ svn propset anemptytag "" dir1/file2 property 'anemptytag' set on 'dir1/file2'
$ svn propget -R mytag dir1 - something ~/svn/atestrepository: $ svn propget -R myothertag dir1/file1 - nothing $ svn propget -R anemptytag dir1/file2 - $ svn proplist dir1/file2 Properties on 'dir1/file2': anemptytag svn:keywords
Eu não recomendaria que essas ferramentas sejam para arquivos binários grandes (de tamanho de gigabyte) que mudam regularmente, mas, para todo o resto, eles já estão bem comprovados e podem ser dimensionados para tamanhos muito grandes.
fonte