it-swarm-eu.dev

Qual è una buona soluzione per la codifica dei file in linux?

Stavo cercando un modo per taggare i miei file e cercarli/filtrarli in base a quei tag.

Ecco i miei requisiti ( aggiornati ):

  • qualsiasi file leggibile dall'utente può essere taggato liberamente
  • un utente può cercare file che corrispondono a uno o più tag
  • i file possono essere spostati senza perdere i tag precedentemente associati
  • il sistema può essere facilmente salvato
  • nessuna dipendenza da nessun ambiente desktop
  • se qualche gui è coinvolto, ci deve essere un fallback cli

Speravo in qualche file system di base e hackery coreutils per gestire questo, ma non ho ancora pensato a questo abbastanza difficile.
Nel frattempo esaminerò beagle e metatracker, che sono stati menzionati qui, e vediamo come si comportano.


Ok così beagle ha enormi dipendenze da gnome, e il tracker è ok, ma ha ancora alcune dipendenze che non mi piacciono ...

State facendo qualche ricerca in più e la strada da percorrere potrebbe essere attributi di file estesi .
Questa è una soluzione nativa per i filesystem più recenti, ma non sono ancora supportati molto bene (la maggior parte dei coreutils li distrugge di default, cp per esempio ha bisogno del flag -a per conservarli). Vorrei avere qualche idea su come usarli mentre cerco di fare da solo alcuni hack, anche se questo potrebbe giustificare una nuova domanda.

68
julien

Non è chiaro che tipo di ricerca desideri. Se vuoi che funzioni ovunque in unix, piuttosto che nella tua home directory, e vuoi solo fare ricerche basate su pathname, lo schema seguente è fattibile, con un po 'di hackery della shell, e usando lo standard locatedb:

  1. Ogni directory che contiene almeno un file con tag necessita di una sottodirectory standard, ad esempio .path-tags;
  2. Ogni file nella directory $ FILE con link $ TAG (che non dovrebbe contenere il char _) ha un link $TAG_$FILE -> ../$FILE

Lascio i dettagli dello script locate-tag a te; dovrebbe essere un two o three-liner, usando solo il comando locate e l'hackery di Shell. (Se sei interessato, potrei scriverne uno).

Alcuni dei membri di KDE hanno parlato di questo tipo di schema per i metadati, anche se non ricordo i dettagli.

Dovrebbe anche essere possibile fare test più sofisticati, che esaminano i contenuti basati su questo schema con uno script simile avvolto in find.

Pensieri sui requisiti aggiornati

  1. qualsiasi file leggibile dall'utente può essere taggato liberamente - Sì, non dovrebbe essere un problema
  2. un utente può cercare file corrispondenti a uno o più tag - Allo stesso modo
  3. i file possono essere spostati senza perdere i tag precedentemente associati - Le directory in cui abitano possono essere spostate liberamente, ma se il file viene spostato dalla directory, siamo nei guai. Se i tag hanno il formato $TAG_$INODE_$FILE e abbiamo un modo efficiente per trovare quali percorsi hanno un dato inode , allora possiamo farlo, perdendo i tag solo se usciamo dai filesystem. Copiare i file potrebbe creare qualche problema, e questo è chiaramente più complicato del mio suggerimento originale.
  4. il sistema può essere facilmente eseguito il backup - non essenzialmente difficile.
  5. nessuna dipendenza da nessun ambiente desktop - nessuno
  6. se qualche gui è coinvolto, ci deve essere un fallback cli - è lì che viviamo!

Postscript Il file "reverse-inode-lookup" descritto dal link (2) mi hai mostrato nella tua risposta a (1) può essere usato per dare qualche infrastruttura aggiuntiva. Possiamo eseguire un servizio sul file di ricerca inversa, che verifica che ogni inode indicato nel nome file di un tag corrisponda all'inode del file (se presente) al quale punta il tag. Se non c'è corrispondenza, è possibile eseguire la chirurgia richiesta (l'inode esiste ancora? Dove si trova?) E il file di ricerca inversa può essere mutato o rigenerato e i tag simbolici vengono aggiornati.

Anticipo un caso complicato: cosa succede se il file taggato non è dove i tag dicono che dovrebbe essere, il file di ricerca inversa dice che esiste ancora, ma il file prodigo non è dove il file di ricerca dice che lo è, il file di ricerca è fuori Data? Ci sono alcuni modi per gestire questo caso, nessuno ovviamente ideale. A parte questo, l'intero compito sembra essere il tipo di cosa che Perl è particolarmente adatto a ...

12
Charles Stewart

Ho appena rilasciato un alfa del mio nuovo programma che tenta di fornire questa funzionalità. Attualmente soddisfa alcuni, ma non tutti, i tuoi requisiti. Potrebbe interessarti comunque. Fornisce uno strumento da riga di comando per il tagging e un sistema di file virtuale per la navigazione (dove i tag sono rappresentati da directory).

http://www.tmsu.org/

qualsiasi file leggibile dall'utente può essere taggato liberamente

Sì.

un utente può cercare file che corrispondono a uno o più tag

Sì. Tramite lo strumento da riga di comando o sfogliando le directory di tag nel sistema di file virtuale.

i file possono essere spostati senza perdere i tag precedentemente associati

No. Tuttavia, l'applicazione memorizza le impronte digitali dei file taggati che vengono utilizzati per aiutare a identificare i file spostati. Viene fornito un comando 'repair' che aggiornerà i percorsi dei file spostati. (Ovviamente questo meccanismo si rompe se un file viene spostato e modificato).

il sistema può essere facilmente salvato

Sì. È un semplice file di database Sqlite 3.

nessuna dipendenza da nessun ambiente desktop

Sì. Nessuna dipendenza e dato che può essere eseguita come un file system virtuale è disponibile per sfogliare come file system in qualsiasi programma che supporti collegamenti simbolici.

se qualche gui è coinvolto, ci deve essere un fallback cli

Nessuna GUI al momento.

22
Paul Ruane

Sorpreso che nessuno abbia menzionato TagSpaces . Soddisfa tutti i tuoi requisiti perché i tag sono memorizzati nel nome del file e TagSpaces è multipiattaforma.

TagSpaces

6
Dan Dascalescu

Penso che questo potrebbe soddisfare tutti i tuoi requisiti. In ogni caso, è un bel pezzo di codice:

http://pages.stern.nyu.edu/~marriaga/software/oyepa

La GUI richiede Qt, ma c'è un'applicazione di riga di comando per la ricerca e il fatto che tutti i tag siano effettivamente nel nome del file rende banale la manipolazione dei tag | file dal cli.

6
laramichaels

Nessuno ha menzionato, ma sicuramente dovresti considerare gli attributi estesi del file system. ad esempio, ext4 li ha. ci sono strumenti getfattr e setfattr per affrontarli. Ovviamente dovrai scrivere alcuni script di shell per cercare i file taggati con sometag. Per quanto riguarda le domande menzionate tutte le risposte sono "Sì". Dovresti solo considerare che dipende dal file system.

5
alik

Probabilmente non hai bisogno di installare l'intero desktop KDE per la loro libreria di tagging, Nepomuk. Dovresti comunque installare le librerie di base di KDE, anche se ...

5
anon

Prova Beagle . Trovo che sia abbastanza buono.

Potrebbe non soddisfare tutti i requisiti, e non sono sicuro di cosa potrebbe. Ad esempio, i file FIFO supportano attributi estesi? Se non lo fanno, Beagle ha un database di fallback.

2
pcapademic

Alcune altre alternative potrebbero essere tagasistant , tagfs o Dantalian .

2
student

Questo recente articolo su Linux Desktop Search Tools menziona che Tracker supporta il tagging. Sfortunatamente dovrebbe essere mezzo rotto nella vecchia versione che hanno testato. Forse è stato risolto ora?

  1. Non a livello di sistema.
  2. Puoi eseguire il backup.
  3. È in bundle con Gnome.
2
Iain

Quindi non troverai l'integrazione di Nepomuk in gnome, alla riga di comando o altrove in Linux.

Al contrario, con Tracker non troverai l'integrazione di kde AFAIK. Non sono sicuro su CLI.

Quindi, sfortunatamente, la risposta sembra essere "no".

Ancora più sfortunatamente, questo non significa che ci sia una buona opportunità qui per costruirne uno. Le utilità della riga di comando di Linux non hanno molto in comune con il file manager della GUI, ad esempio, quindi, architettonicamente, non esiste una componente comune che potrebbe essere estesa per supportare il concetto.

1
pbr

Ho creato un piccolo programma che utilizza SQLite per questo scopo. Ha risolto il mio bisogno, ma forse aiuta anche te:

https://github.com/alvatar/dfym

L'unico problema con questo approccio è che non si sincronizza con le mosse e le eliminazioni, ma risolve il problema per i file relativamente statici.

0
alvatar

TMSU

TMSU è uno strumento per taggare i tuoi file. Fornisce una semplice utility da riga di comando per l'applicazione di tag e un file system virtuale per fornire una visualizzazione basata su tag dei file da qualsiasi altro programma.

TMSU non modifica in alcun modo i tuoi file: rimangono invariati su disco, o sulla rete, ovunque li metti. TMSU mantiene il proprio database e ottieni semplicemente una vista aggiuntiva, che puoi montare dove preferisci, in base ai tag che hai impostato.

Sorpreso, nessuno l'ha menzionato.

0
justsomeguy