Qual è una buona soluzione per la codifica dei file in Linux? [chiuso]


71

Ho cercato 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 corrispondenti a uno o più tag
  • i file possono essere spostati senza perdere i tag precedentemente associati
  • è possibile eseguire facilmente il backup del sistema
  • nessuna dipendenza da alcun ambiente desktop
  • se è coinvolta qualche gui, deve esserci un fallback cli

Speravo in un hacker di base per filesystem e coreutils per gestirlo, ma non ci ho ancora pensato abbastanza.
Nel frattempo passerò in rassegna beagle e metatracker, che sono stati menzionati qui, e vedrò come si esibiscono.


Ok, quindi Beagle ha enormi dipendenze da gnome e tracker è okish, ma ha ancora alcune dipendenze che non mi piacciono ...

Ho fatto qualche ricerca in più e la strada da percorrere potrebbe benissimo essere estesa agli attributi di file .
Questa è una soluzione nativa per i filesystem più recenti, ma non sono ancora ben supportati (la maggior parte dei coreutils li distrugge per impostazione predefinita, ad esempio cp ha bisogno del flag -a per conservarli). Mi piacerebbe sentire alcuni pensieri su come usarli mentre provo io stesso alcuni hack, anche se questo potrebbe giustificare una nuova domanda.


2
Problemi con attributi di file estesi: (i) Nella mia esperienza, sono un fastidio quando si desidera eseguire il backup. (ii) Non puoi usarli quando ti sposti tra i filesystem. A parte questo, sarebbero la cosa giusta.
Charles Stewart,


Nei forum PC-BSD, con riferimento all'edizione 2010 di questa domanda: PC-BSD, attributi estesi e tag; L'approccio di OpenMeta e Apple
Graham Perrin il

Risposte:


13

Non è chiaro quale tipo di ricerca desideri. Se vuoi che funzioni ovunque in unix, piuttosto che solo la tua home directory, e vuoi solo fare ricerche basate sul nome percorso, il seguente schema è fattibile, con un po 'di hacking della shell e usando lo standard locatedb:

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

Vi lascio i dettagli della locate-tagsceneggiatura; dovrebbe essere una linea a due o tre locaterighe , usando solo il comando e la pirateria informatica. (Se sei interessato, potrei scriverne uno).

Alcuni tipi 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, che esaminano il contenuto, basati su questo schema con uno script simile find.

Considerazioni 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 si trovano possono essere spostate liberamente, ma se il file viene spostato dalla directory, ci sono problemi. Se i tag hanno preso la forma $TAG_$INODE_$FILEe abbiamo un modo efficiente per trovare quali percorsi hanno un dato inode , allora 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.
  4. è possibile eseguire facilmente il backup del sistema , non sostanzialmente difficile.
  5. nessuna dipendenza da alcun ambiente desktop - nessuna
  6. se è coinvolta qualche gui, ci deve essere un fallback cli - è lì che viviamo!

Postscript Il file "reverse-inode-lookup" descritto dal link (2) che mi hai mostrato nella tua risposta a (1) può essere usato per fornire un'infrastruttura aggiuntiva. Possiamo eseguire un servizio sul file di ricerca inversa, che verifica che ciascun inode indicato nel nome file di un tag corrisponda all'inode del file (se presente) a cui punta il tag. Se non esiste alcuna corrispondenza, è possibile eseguire l'intervento chirurgico richiesto (esiste ancora l'inode? Dov'è?) E il file di ricerca inversa viene modificato o rigenerato e il collegamento simbolico dei tag viene aggiornato.

Prevedo 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 dice il file di ricerca, il file di ricerca essendo 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 è adatto a ...


1
Questo è carino, e ho pensato di usare anche i symlink. Il problema è che un file non può essere spostato senza perdere i tag. Idealmente, i tag sarebbero indipendenti dal percorso, e la ricerca di un tag dovrebbe restituire il file effettivo, piuttosto che un link simbolico morto ... PS: sono tutto per una soluzione basata su shell, ma penso che il dominio problematico lo faccia in modo che sarebbe piuttosto doloroso da mantenere solo attraverso script di shell, spero che qualcuno mi dimostri di sbagliare
julien,

Ho modificato la mia domanda per (si spera) per chiarire che tipo di soluzione sto cercando. evviva
luglio

Accidenti non avevo mai capito che gli inode fossero come guide persistenti per i file, questo è uno spunto di riflessione!
luglio

1
gli inode sono uidi, ma sono legati a una data fs, quindi non sono guide. Questa non è una brutta cosa, dal momento che la copia, i backup, l'archiviazione, ecc., Significano che i file vengono duplicati e archiviati in altri file e vuoi che lo stato fs ti dia abbastanza informazioni per districare i risultati.
Charles Stewart,

1
Ho perso la battuta finale, quale software può adattarlo? Speravo in qualcosa che potessi usare casualmente senza scrivere la mia infrastruttura. (Ma chiaramente in modo che io possa
estenderlo

22

Ho appena rilasciato una versione alfa del mio nuovo programma che tenta di fornire questa funzionalità. Attualmente soddisfa alcune, ma non tutte, le tue esigenze. Potrebbe interessarti comunque. Fornisce uno strumento da riga di comando per la codifica e un file system virtuale per la navigazione (in cui 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ì. Tramite lo strumento da 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 utilizzati per identificare i file spostati. Viene fornito un comando 'ripara' che aggiornerà i percorsi dei file spostati. (Ovviamente questo meccanismo si rompe 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 file system virtuale, è disponibile per esaminare come file system in qualsiasi programma che supporti i collegamenti simbolici.

se è coinvolta qualche gui, deve esserci un fallback cli

Nessuna GUI al momento.


Sembra molto interessante Hai idea di come implementare la possibilità di spostare i file senza perdere i tag associati?
studente

@student: attualmente esiste un comando 'ripara' che si occupa di file spostati e modificati. (Se entrambi spostate e modificate un file, tuttavia, questo non verrà rilevato.)
Paul Ruane,

Forse si potrebbero scrivere varianti di mv, cpe rmche gestiscono anche i tuoi tag (chiamarli per esempio tmv, tcpe trm) quindi non si perderebbero i tag almeno se si utilizza la riga di comando per spostare i file in giro ...
studente

@student TMSU ora include alcuni script che eseguono operazioni di filesystem pur mantenendo il database fino ad oggi: tmsu-fs-mv, tmsu-fs-rme tmsu-fs-merge.
Paul Ruane,

Scusa la mia domanda ma ... ¿perché non semplicemente clonare i tag quando si sposta automaticamente un file? Devo aggiornare manualmente i file quando mi muovo?
erm3nda,

6

Penso che questo potrebbe soddisfare tutte le tue esigenze. In ogni caso, è un bel pezzo di codice:

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

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


1
Dalla pagina: "Le informazioni sui tag sono memorizzate nel nome del file" - quindi che aspetto hanno i nomi dei file taggati? A proposito, i link in quella pagina sono molto interessanti: +1.
Charles Stewart,

report-for-bill [work stuff, hr, prodotto da me] .odt
laramichaels

@laramichaels So che questo è piuttosto vecchio, ma ho trovato l'approccio molto interessato. Se non fosse per la mancanza di documentazione (da nessuna parte viene spiegato come funziona la denominazione dei file) lo adotterei. Se hai notizie su tali strumenti, per favore fatemelo sapere,
TomCho

6

Nessuno ha menzionato, ma dovresti assolutamente guardare agli attributi estesi del file system. ext4 ad esempio li ha. ci sono strumenti getfattr e setfattr per gestirli. Ovviamente dovrai scrivere alcuni script di shell per cercare i file taggati con qualcosa. Per quanto riguarda le domande menzionate, tutte le risposte sono "Sì". Si dovrebbe solo tener conto del fatto che dipendeva dal file system.


I dati Inode del file dovrebbero essere sicuramente il modo corretto di farlo su un ext4 fs, ma non offriranno alcuna compatibilità con le versioni precedenti. Giusto?
erm3nda,

6

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

TagSpaces


1
gli spazi tag non hanno un fallback CLI, quindi non soddisfano tutti i requisiti. O ha una CLI? Se lo fa, per favore, fammi sapere!
TomCho,

Non c'è supporto per l'applicazione in Debian 9 apt. Qualcosa sta arrivando? - - È possibile installare l'app seguendo
Léo Léopold Hertz 준영

Potete per favore confrontare la vostra proposta con gli strumenti di ricerca desktop Linux?
Léo Léopold Hertz 준영

5

Probabilmente non è necessario installare l'intero desktop KDE per la loro libreria di tag, Nepomuk. Dovresti comunque installare le librerie di base di KDE, sebbene ...


1
si beh, speravo di trovare un'alternativa a questo, ma non sembra così ...
luglio

2

Questo recente articolo su Linux Desktop Search Tools menziona che Tracker supporta il tagging. Sfortunatamente si suppone che sia rotto a metà nella vecchia versione che hanno testato. Forse è stato risolto ora?

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

2

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 gli attributi estesi? In caso contrario, Beagle ha un database di fallback.


Beagle può gestire file non regolari?
Charles Stewart,

@Charles Stewart - intendi file non testuali?
pcapademic,

No, intendo file dispositivo, collegamenti simbolici, FIFO ecc.
Charles Stewart,

Tale collegamento non fa riferimento a un progetto sull'organizzazione dei documenti.
detly



1

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

Al contrario, con Tracker non troverai l'integrazione kde AFAIK. Non sono sicuro sulla 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 utility della riga di comando di Linux non hanno molto in comune con il file manager della GUI, ad esempio, quindi dal punto di vista architettonico non esiste alcun componente comune che possa essere esteso per supportare il concetto.


0

Ho realizzato 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 gli spostamenti e le eliminazioni, ma risolve il problema per i file relativamente statici.


0

TMSU

TMSU è uno strumento per taggare i tuoi file. Fornisce una semplice utility da riga di comando per applicare tag e un filesystem virtuale per darti una vista basata su tag dei tuoi file da qualsiasi altro programma.

TMSU non modifica in alcun modo i tuoi file: rimangono invariati sul disco o sulla rete, ovunque tu li inserisca. 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 lo ha menzionato.


1
ti sei perso ... è la risposta più votata
pesce palla

-1

Suggerisco di dare un'occhiata a un sistema di controllo della versione come Subversion per questo tipo di funzionalità sopra e oltre il file system. Alcuni potrebbero adattarti meglio di altri, ma in generale:

  • Molti supportano il tagging (sicuramente sovversione).
  • Molti sono multipiattaforma; Windows, Mac, Linux, praticamente tutti gli Unix.
  • Molti hanno sia i front-end della GUI sia i client della riga di comando.
  • Molti hanno già collegamenti per il tuo linguaggio di programmazione / scripting preferito.
  • Molti possono essere facilmente sottoposti a backup.
  • Molti sono progettati per essere facilmente condivisibili in un modo o nell'altro.
  • Molti ti consentono di controllare l'accesso.
  • Non è necessario reinventare la ruota.
    • Apprendi e usi i comandi / strumenti standard già utilizzati da milioni di utenti.
  • Puoi installarlo oggi per il tuo repository SO preferito; apt-get install, yum install
  • Ottieni anche la gestione delle versioni "gratuitamente".

Un esempio cli con 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

Non consiglierei questi strumenti per file binari di grandi dimensioni (dimensioni gigabyte) che cambiano regolarmente, ma per tutto il resto sono già ben collaudati e scalabili in dimensioni molto grandi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.