O que é uma boa solução para a marcação de arquivos no linux? [fechadas]


71

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.


2
Problemas com atributos de arquivo estendidos: (i) Na minha experiência, eles são um incômodo quando você deseja fazer backup. (ii) Você não pode usá-los quando se move entre sistemas de arquivos. Além disso, eles seriam a coisa certa.
Charles Stewart


Nos fóruns do PC-BSD, com referência à edição de 2010 desta pergunta: PC-BSD, atributos estendidos e marcação; OpenMeta e abordagem da Apple
Graham Perrin

Respostas:


13

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:

  1. Cada diretório que contém pelo menos um arquivo marcado precisa de um subdiretório padrão, digamos .path-tags;
  2. Cada arquivo no diretório $ FILE com o link $ TAG (que não deve conter o caractere _) possui um link$TAG_$FILE -> ../$FILE

Deixo os detalhes do locate-tagscript para você; deve ser de duas ou três linhas, usando apenas o locatehackery 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

  1. qualquer arquivo legível pelo usuário pode ser marcado livremente - Sim, não deve ser problema
  2. um usuário pode procurar por arquivos que correspondam a uma ou várias tags - Da mesma forma
  3. os arquivos podem ser movidos sem perder as tags associadas anteriormente - Os diretórios em que eles habitam podem ser movidos livremente, mas se o arquivo for movido do diretório, estamos com problemas. Se as tags $TAG_$INODE_$FILEtiverem 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.
  4. o backup do sistema pode ser feito facilmente - não é difícil.
  5. sem dependências em nenhum ambiente de desktop - nenhum
  6. se qualquer gui estiver envolvido, deve haver um retorno do cli - é onde moramos!

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 ...


1
Isso é legal, e eu tenho pensado em usar links simbólicos também. O problema é que um arquivo não pode ser movido sem perder suas tags. Idealmente, as tags seriam independentes de caminho e a busca por uma tag deve retornar o arquivo real, em vez de um link simbólico morto ... PS: Sou a favor de uma solução baseada em shell, mas acho que o domínio do problema faz com que 'd ser muito doloroso para manter apenas através de scripts shell, espero que alguém me prove errado
Julien

Eu editei minha pergunta para (espero) deixar mais claro que tipo de solução eu estou procurando. Cheers
julien

Porra, eu nunca tinha percebido que inodes eram como guias persistentes para arquivos, isso é alimento para pensar!
Julien

1
inodes são uids, mas estão vinculados a um dado fs, portanto, não são guids. Isso não é algo ruim, pois copiar, fazer backup, arquivar etc. significa que os arquivos são duplicados e armazenados em outros arquivos, e você deseja que o estado fs forneça informações suficientes para separar os resultados.
Charles Stewart

1
Eu perdi o punchline, que software pode acomodar isso? Eu esperava algo que pudesse usar casualmente sem escrever minha própria infraestrutura. (Mas simples para que eu possa medida em que eu mesmo quando desejado)
ThorSummoner

22

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/

qualquer arquivo legível pelo usuário pode ser marcado livremente

Sim.

um usuário pode procurar arquivos correspondentes a uma ou várias tags

Sim. Através da ferramenta de linha de comando ou navegando nos diretórios de tags no sistema de arquivos virtual.

arquivos podem ser movidos sem perder as tags associadas anteriormente

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.)

o backup do sistema pode ser feito facilmente

Sim. É um simples arquivo de banco de dados do Sqlite 3.

sem dependências em qualquer ambiente de desktop

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.

se alguma GUI estiver envolvida, deve haver um fallback de CLI

Nenhuma GUI no momento.


Parece muito interessante. Você tem alguma idéia de como implementar a possibilidade de mover arquivos sem perder as tags associadas?
student

@ aluno: atualmente existe um comando 'reparo' que lida com arquivos movidos e modificados. (Se você quer mover e modificar um arquivo, no entanto, isso não vai ser detectado.)
Paul Ruane

Talvez se possa escrever variantes mv, cpe rmque lidar com suas tags, bem como (chamá-los, por exemplo tmv, tcpe trm) então não perderia etiquetas pelo menos se se usa a linha de comando para mover arquivos ...
estudante de

@student TMSU agora inclui alguns scripts que executam operações do sistema de arquivos ao mesmo tempo manter o banco de dados até a data: tmsu-fs-mv, tmsu-fs-rme tmsu-fs-merge.
Paul Ruane

Desculpe minha pergunta, mas ... ¿por que não simplesmente clonar tags ao mover um arquivo automaticamente? Preciso atualizar manualmente os arquivos ao mover?
erm3nda

6

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.


1
Na página: "As informações da tag são armazenadas no nome do arquivo" - como são os nomes de arquivos marcados? Aliás, os links nessa página são muito interessantes: +1.
Charles Stewart

informar-de-conta [material de trabalho, hr, produzido por mim] .odt
laramichaels

@laramichaels Eu sei que isso é bem antigo, mas achei a abordagem muito interessada. Se não fosse pela falta de documentação (em nenhum lugar é explicado como a nomeação de arquivos funciona) eu adotaria. Se você tiver alguma notícia sobre essas ferramentas, entre em
contato

6

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.


Os dados inode do arquivo devem ser definitivamente a maneira correta de fazer isso em um ext4 fs, mas não oferecerão nenhuma compatibilidade com versões anteriores. Direito?
erm3nda

6

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.

TagSpaces


1
tagspaces não possui um fallback da CLI, portanto, ele não atende a todos os requisitos. Ou ele tem uma CLI? Se isso acontecer, por favor, me avise!
TomCho

Não há suporte para a aplicação no Debian 9 apt. Está chegando alguma coisa? - - Você pode instalar o aplicativo seguindo
Léo Léopold Hertz

Você pode comparar sua proposta com as Ferramentas de pesquisa da área de trabalho do Linux?
Léo Léopold Hertz ·

5

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 ...


1
sim, bem, eu estava esperando encontrar uma alternativa para isso, mas não parece tão ... #
1113

2

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?

  1. Não é amplo no sistema.
  2. Você pode fazer o backup.
  3. É fornecido com o Gnome.

2

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.


O beagle pode lidar com arquivos não regulares?
Charles Stewart

@ Charles Stewart - você quer dizer arquivos não-texto?
Pcapademic

Não, refiro-me a arquivos de dispositivos, links simbólicos, FIFOs, etc.
Charles Stewart

Esse link não se refere a um projeto sobre organização de documentos.
detly 15/05



1

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.


0

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.


0

TMSU

O TMSU é uma ferramenta para marcar seus arquivos. Ele fornece um utilitário de linha de comando simples para aplicar tags e um sistema de arquivos virtual para fornecer uma visualização baseada em tags dos seus arquivos a partir de qualquer outro programa.

O TMSU não altera seus arquivos de forma alguma: eles permanecem inalterados no disco ou na rede, onde quer que você os coloque. O TMSU mantém seu próprio banco de dados e você simplesmente obtém uma visualização adicional, que pode montar onde quiser, com base nas tags configuradas.

Surpreendido, ninguém o mencionou.


1
você perdeu ... é o mais votado resposta
baiacu

-1

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:

  • Muitos suportam marcação (certamente subversão).
  • Muitos são multiplataforma; Windows, Mac, Linux, praticamente todos os Unixes.
  • Muitos têm front-ends da GUI e clientes de linha de comando.
  • Muitos já possuem ligações para sua linguagem de programação / script favorita.
  • Muitos são facilmente copiados.
  • Muitos são projetados para serem facilmente compartilháveis ​​de uma maneira ou de outra.
  • Muitos permitem que você controle o acesso.
  • Você não precisa reinventar a roda.
    • Você aprende e usa comandos / ferramentas padrão já usados ​​por milhões.
  • Você pode instalá-lo hoje para seu repositório de sistema operacional favorito; instalação apt-get, yum install
  • Você também obtém o gerenciamento de versões "de graça".

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.