Ho appena rilasciato una versione alfa del mio nuovo programma che tenta di fornire questa funzionalità. Attualmente soddisfa alcune delle tue esigenze, ma non tutte. Potrebbe comunque interessarti. Fornisce uno strumento a riga di comando per l'etichettatura e un file system 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 corrispondenti a uno o più tag
Sì. O tramite lo strumento della riga di comando o sfogliando le directory dei tag nel file system virtuale.
i file possono essere spostati senza perdere i tag precedentemente associati
No. Tuttavia, l'applicazione memorizza le impronte digitali dei file contrassegnati che vengono utilizzate per aiutare a identificare i file spostati. Viene fornito un comando "ripara" che aggiornerà i percorsi dei file spostati. (Ovviamente questo meccanismo si interrompe se un file viene sia spostato che modificato.)
è possibile eseguire facilmente il backup del sistema
Sì. È un semplice file di database Sqlite 3.
nessuna dipendenza da alcun ambiente desktop
Sì. Nessuna dipendenza e poiché può essere eseguito come un file system virtuale, è disponibile per essere letto come un file system in qualsiasi programma che supporti collegamenti simbolici.
se è coinvolta una GUI, deve esserci un fallback cli
Nessuna GUI al momento.
Non è chiaro che tipo di ricerca desideri. Se vuoi che funzioni ovunque in unix, piuttosto che solo nella tua home directory, e vuoi solo fare ricerche basate sul percorso, il seguente schema è realizzabile, con un po' di shell hacking, e usando lo standard locatedb
:
- Ogni directory che contiene almeno un file con tag necessita di una sottodirectory standard, ad esempio
.path-tags
; - Ogni file nella directory $FILE con link $TAG (che non dovrebbe contenere il carattere
_
) ha un collegamento$TAG_$FILE -> ../$FILE
Lascio i dettagli del locate-tag
sceneggiatura per te; dovrebbe essere a due o tre righe, usando solo il locate
comando e shell hackery. (Se sei interessato, potrei scriverne uno).
Alcuni dei ragazzi di KDE hanno parlato di questo tipo di schema per i metadati, anche se non ricordo i dettagli.
Dovrebbe anche essere possibile eseguire test più sofisticati per l'esame dei contenuti basati su questo schema con uno script simile racchiuso attorno a find
.
Riflessioni sui requisiti aggiornati
- qualsiasi file leggibile dall'utente può essere taggato liberamente - Sì, non dovrebbero esserci problemi
- un utente può cercare file corrispondenti a uno o più tag - Allo stesso modo
- 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 assunto la forma
$TAG_$INODE_$FILE
e abbiamo un modo efficiente per trovare quali percorsi hanno un dato inode, quindi possiamo farlo, perdendo i tag solo se usciamo dai filesystem. La copia dei file potrebbe creare qualche problema, e questo è chiaramente più complicato del mio suggerimento originale. - è stato possibile eseguire facilmente il backup del sistema - non essenzialmente difficile.
- nessuna dipendenza da alcun ambiente desktop - nessuno
- se è coinvolta una GUI, deve esserci un fallback cli - è lì che viviamo!
Post scriptum Il file "reverse-inode-lookup" descritto dal collegamento (2) che mi hai mostrato nella tua risposta a (1) può essere utilizzato per fornire un'infrastruttura aggiuntiva. Possiamo eseguire un servizio sul file di ricerca inversa, che verifica che ogni inode fornito nel nome file di un tag corrisponda all'inode del file (se presente) a cui punta il tag. Se non c'è corrispondenza, è possibile eseguire l'intervento chirurgico richiesto (l'inode esiste ancora? Dov'è?) e il file di ricerca inversa viene mutato o rigenerato e i collegamenti simbolici del tag vengono aggiornati.
Prevedo un caso complicato:cosa succede se il file con tag non è dove i tag dicono che dovrebbe essere, il file di ricerca inversa dice che esiste ancora, ma il file prodigo non è dove dice il file di ricerca, il file di ricerca è fuori Data? Ci sono alcuni modi per gestire questo caso, nessuno ovviamente ideale. A parte questo, tutto questo compito sembra essere il genere di cose per cui Perl è adatto...
Nessuno ha menzionato, ma dovresti assolutamente guardare gli attributi del file system esteso.ext4 per esempio li ha. ci sono strumenti getfattr e setfattr per gestirli. Ovviamente dovrai scrivere alcuni script di shell per cercare file etichettati con sometag. Per quanto riguarda le domande menzionate, tutte le risposte sono "Sì". Dovresti solo tenere in considerazione che dipende dal file system.