Was ist eine gute Lösung für File-Tagging unter Linux? [geschlossen]

71

Ich habe nach einer Möglichkeit gesucht, meine Dateien mit Tags zu versehen und anhand dieser Tags zu suchen / zu filtern.

Hier sind meine ( aktualisierten ) Anforderungen:

  • Jede Datei, die vom Benutzer gelesen werden kann, kann frei markiert werden
  • Ein Benutzer kann nach Dateien suchen, die einem oder mehreren Tags entsprechen
  • Dateien können verschoben werden, ohne die zuvor zugeordneten Tags zu verlieren
  • Das System kann problemlos gesichert werden
  • Keine Abhängigkeiten von Desktop-Umgebungen
  • Wenn eine GUI beteiligt ist, muss es einen CLI-Fallback geben

Ich habe auf eine grundlegende Hackerei mit Dateisystemen und Coreutils gehofft, um damit fertig zu werden, aber ich habe noch nicht genug darüber nachgedacht.
In der Zwischenzeit werde ich Beagle und Metatracker, die hier erwähnt wurden, überprüfen und sehen, wie sie funktionieren.


Ok, Beagle hat riesige Gnomabhängigkeiten und Tracker ist ok, aber es gibt immer noch einige Abhängigkeiten, die ich nicht mag ...

Ich habe etwas mehr nachgeforscht und der Weg dorthin könnte sehr gut in erweiterten Dateiattributen liegen .
Das ist eine native Lösung für die neuesten Dateisysteme, aber sie werden noch nicht sehr gut unterstützt (die meisten Coreutils zerstören sie standardmäßig, cp benötigt zum Beispiel das Flag -a, um sie zu erhalten). Ich würde gerne einige Gedanken über deren Verwendung hören, während ich mich an einigen Hacks versuche, obwohl dies eine neue Frage rechtfertigen könnte.

julien
quelle
2
Probleme mit erweiterten Dateiattributen: (i) Nach meiner Erfahrung sind sie ein Ärgernis, wenn Sie eine Sicherungskopie erstellen möchten. (ii) Sie können sie nicht verwenden, wenn Sie zwischen Dateisystemen wechseln. Abgesehen davon wären sie das Richtige.
Charles Stewart
PytagsFS superuser.com/a/89140/129520
n611x007
In den PC-BSD-Foren mit Bezug auf die Ausgabe 2010 dieser Frage: PC-BSD, erweiterte Attribute und Tagging; OpenMeta und Apples Ansatz
Graham Perrin
1
Es überrascht nicht, dass Reddit auf diese Frage viel bessere und neuere Antworten hat .
Dan Dascalescu

Antworten:

13

Es ist nicht klar, welche Art von Suche Sie möchten. Wenn Sie möchten, dass es unter Unix überall funktioniert, anstatt nur in Ihrem Home-Verzeichnis, und wenn Sie nur nach Pfadnamen suchen möchten, können Sie das folgende Schema mit ein wenig Shell-Hackery und dem Standard verwenden locatedb:

  1. Jedes Verzeichnis, das mindestens eine mit Tags versehene Datei enthält, benötigt beispielsweise ein Standard-Unterverzeichnis .path-tags.
  2. Jede Datei im Verzeichnis $ FILE mit dem Link $ TAG (der das Zeichen nicht enthalten sollte _) hat einen Link$TAG_$FILE -> ../$FILE

Ich überlasse locate-tagIhnen die Details des Drehbuchs. Es sollte sich um einen Zwei- oder Dreizeiler handeln, bei dem nur der locateBefehl und Shell-Hackery verwendet werden. (Wenn Sie interessiert sind, könnte ich eine schreiben).

Einige der KDE-Leute haben über diese Art von Schema für Metadaten gesprochen, obwohl ich mich nicht an die Details erinnere.

Es sollte auch möglich sein, anspruchsvollere inhaltliche Tests auf der Grundlage dieses Schemas mit einem ähnlichen Skript durchzuführen find.

Gedanken zu aktualisierten Anforderungen

  1. Jede Datei, die vom Benutzer gelesen werden kann, kann frei markiert werden - Ja, sollte kein Problem sein
  2. kann ein Benutzer ein oder mehrere Tags für Dateien suchen passend - Ebenso
  3. Dateien können verschoben werden, ohne die zuvor verknüpften Tags zu verlieren - Die Verzeichnisse, in denen sie sich befinden, können frei verschoben werden. Wenn die Datei jedoch aus dem Verzeichnis verschoben wird, treten Probleme auf. Wenn die Tags die Form haben $TAG_$INODE_$FILEund wir auf effiziente Weise herausfinden können, welche Pfade einen bestimmten Inode haben , können wir dies tun, indem wir Tags nur verlieren, wenn wir aus Dateisystemen herausziehen. Das Kopieren von Dateien kann einige Probleme verursachen, und dies ist eindeutig komplizierter als mein ursprünglicher Vorschlag.
  4. Das System konnte leicht gesichert werden - nicht wesentlich schwierig.
  5. Keine Abhängigkeiten von einer Desktop-Umgebung - Keine
  6. Wenn eine GUI involviert ist, muss es einen CLI-Fallback geben - hier leben wir!

Postscript Die "Reverse-Inode-Lookup" -Datei, die durch den Link (2) beschrieben wird, den Sie mir in Ihrer Antwort auf (1) gezeigt haben, kann verwendet werden, um eine zusätzliche Infrastruktur bereitzustellen. Wir können einen Dienst für die Reverse-Lookup-Datei ausführen, der überprüft, ob jeder im Dateinamen eines Tags angegebene Inode mit dem Inode der Datei (falls vorhanden) übereinstimmt, auf die das Tag verweist. Wenn es keine Übereinstimmung gibt, kann die erforderliche Operation durchgeführt werden (ist der Inode noch vorhanden? Wo befindet er sich?), Und die Reverse-Lookup-Datei wird entweder mutiert oder neu generiert und die Tag-Symlinks werden aktualisiert.

Ich erwarte einen kniffligen Fall: Was passiert, wenn die mit Tags versehene Datei nicht an der Stelle ist, an der sie laut Tags angezeigt werden soll? Die Reverse-Lookup-Datei gibt an, dass sie noch vorhanden ist Datum? Es gibt einige Möglichkeiten, mit diesem Fall umzugehen, von denen offensichtlich keine ideal ist. Abgesehen davon scheint diese ganze Aufgabe genau das zu sein, wofür Perl gut geeignet ist ...

Charles Stewart
quelle
1
Das ist schön und ich habe darüber nachgedacht, Symlinks zu verwenden. Das Problem ist, dass eine Datei nicht verschoben werden kann, ohne dass ihre Tags verloren gehen. Im Idealfall sind Tags pfadunabhängig, und die Suche nach einem Tag sollte die eigentliche Datei und nicht einen toten Symlink zurückgeben ... PS: Ich bin alles für eine Shell-basierte Lösung, aber ich denke, die Problemdomäne macht es so, dass es es wäre ziemlich schmerzhaft, nur durch shell-
skripte
Ich habe meine Frage bearbeitet, um (hoffentlich) klarer zu machen, welche Art von Lösung ich anstrebe. prost
julien
Verdammt, ich hätte nie gedacht, dass Inodes wie dauerhafte Anleitungen für Dateien sind, das ist ein Denkanstoß!
Julien
1
inodes sind uids, aber sie sind an ein bestimmtes fs gebunden, also keine guids. Dies ist keine schlechte Sache, da das Kopieren, Sichern, Archivieren & c bedeutet, dass Dateien dupliziert und in anderen Dateien gespeichert werden, und Sie möchten, dass der Status fs Ihnen genügend Informationen gibt, um die Ergebnisse zu entwirren.
Charles Stewart
1
Ich habe die Pointe verpasst. Welche Software kann das unterstützen? Ich habe auf etwas gehofft, das ich lässig nutzen kann, ohne meine eigene Infrastruktur zu schreiben. (Aber klar, damit ich es selbst erweitern kann, wenn gewünscht)
ThorSummoner
22

Ich habe gerade ein Alpha meines neuen Programms veröffentlicht, das versucht, diese Funktionalität bereitzustellen. Derzeit werden einige, aber nicht alle Ihrer Anforderungen erfüllt. Es könnte Sie trotzdem interessieren. Es bietet ein Befehlszeilentool zum Taggen und ein virtuelles Dateisystem zum Durchsuchen (wobei Tags durch Verzeichnisse dargestellt werden).

http://www.tmsu.org/

Jede Datei, die vom Benutzer gelesen werden kann, kann frei markiert werden

Ja.

Ein Benutzer kann nach Dateien suchen, die einem oder mehreren Tags entsprechen

Ja. Entweder über das Befehlszeilentool oder durch Durchsuchen der Tag-Verzeichnisse im virtuellen Dateisystem.

Dateien können verschoben werden, ohne die zuvor zugeordneten Tags zu verlieren

Nein. Die Anwendung speichert jedoch Fingerabdrücke der mit Tags versehenen Dateien, mit deren Hilfe verschobene Dateien identifiziert werden können. Es wird ein Reparaturbefehl bereitgestellt, mit dem die Pfade der verschobenen Dateien aktualisiert werden. (Offensichtlich funktioniert dieser Mechanismus nicht mehr, wenn eine Datei sowohl verschoben als auch geändert wird.)

Das System kann problemlos gesichert werden

Ja. Es ist eine einfache Sqlite 3-Datenbankdatei.

Keine Abhängigkeiten von Desktop-Umgebungen

Ja. Keine Abhängigkeiten und da es als virtuelles Dateisystem ausgeführt werden kann, kann es in jedem Programm, das symbolische Links unterstützt, als Dateisystem verwendet werden.

Wenn eine GUI beteiligt ist, muss es einen CLI-Fallback geben

Derzeit keine GUI.

Paul Ruane
quelle
Sieht sehr interessant aus. Haben Sie eine Idee, wie Sie die Möglichkeit implementieren können, Dateien zu verschieben, ohne die zugehörigen Tags zu verlieren?
Schüler
@student: Derzeit gibt es einen Reparaturbefehl, der sich mit verschobenen und geänderten Dateien befasst. (Wenn Sie eine Datei jedoch gleichzeitig verschieben und ändern, wird dies nicht erkannt.)
Paul Ruane
Vielleicht könnte man Varianten schreiben mv, cpund rmdie handhaben Ihre Tags als auch (nennen wir sie zum Beispiel tmv, tcpund trm) , dann würde man keine Tags verlieren zumindest wenn man die Kommandozeile verwendet , um Dateien zu bewegen ...
Student
@student TMSU enthält nun einige Skripte , die Dateisystem - Operationen während halten die Datenbank aktuell durchführen: tmsu-fs-mv, tmsu-fs-rmund tmsu-fs-merge.
Paul Ruane
Entschuldigen Sie meine Frage, aber ... ¿warum nicht einfach Tags klonen, wenn eine Datei automatisch verschoben wird? Muss ich die Dateien beim Verschieben manuell aktualisieren?
Erm3nda
6

Ich denke, das könnte all Ihren Anforderungen entsprechen. In jedem Fall ist es ein cooles Stück Code:

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

Die GUI erfordert Qt, aber es gibt eine Befehlszeilenanwendung für die Suche und die Tatsache, dass sich alle Tags tatsächlich im Dateinamen befinden, macht es trivial, Tags | Dateien von der CLI aus zu bearbeiten.

Laramichaels
quelle
1
Von der Seite: "Tag-Informationen werden im Dateinamen gespeichert" - wie sehen die mit Tags versehenen Dateinamen aus? Übrigens sind die Links auf dieser Seite sehr interessant: +1.
Charles Stewart
report-for-bill [
arbeitszeug
@laramichaels Ich weiß, das ist ziemlich alt, aber ich fand den Ansatz sehr interessiert. Wenn es keine Dokumentation gäbe (nirgendwo wird erklärt, wie die Dateinamen funktionieren), würde ich sie übernehmen. Wenn Sie Neuigkeiten zu solchen Tools haben, lassen Sie es mich bitte wissen.
TomCho
6

Niemand erwähnt, aber Sie sollten sich auf jeden Fall die erweiterten Dateisystemattribute ansehen. ext4 zum Beispiel hat sie. Es gibt die Tools getfattr und setfattr, die sich mit ihnen befassen. Natürlich müssen Sie einige Shell-Skripte schreiben, um nach Dateien mit dem Tag sometag zu suchen. In Bezug auf die genannten Fragen lauten alle Antworten "Ja". Sie sollten nur berücksichtigen, dass dies vom Dateisystem abhängt.

alik
quelle
Inode-Daten der Datei sollten definitiv die richtige Methode sein, um dies auf einer ext4 fs zu tun, bieten jedoch keine Abwärtskompatibilität. Richtig?
erm3nda
6

Erstaunt, dass niemand TagSpaces erwähnt hat . Es erfüllt alle Ihre Anforderungen, da Tags im Dateinamen gespeichert sind und TagSpaces plattformübergreifend sind.

TagSpaces

Dan Dascalescu
quelle
1
TagSpaces haben kein CLI-Fallback, daher werden nicht alle Anforderungen erfüllt. Oder hat es eine CLI? Dann lassen Sie es mich bitte wissen!
TomCho
Es gibt keine Unterstützung für die Anwendung in Debian 9 apt. Kommt noch was? - - Sie können die App wie folgt
Léo Léopold Hertz 준영
Können Sie bitte Ihren Vorschlag mit Linux Desktop Search Tools vergleichen?
Léo Léopold Hertz 준영
5

Sie müssen wahrscheinlich nicht den gesamten KDE-Desktop für die Tagging-Bibliothek Nepomuk installieren. Sie müssten trotzdem KDE-Basisbibliotheken installieren ...


quelle
1
Ja, nun, ich hatte gehofft, eine Alternative zu diesem zu finden, aber es sieht nicht so aus ...
Julien
2

In diesem kürzlich erschienenen Artikel zu Linux Desktop Search Tools wird erwähnt, dass Tracker Tagging unterstützt. Leider soll es in der alten Version, die sie getestet haben, halb kaputt sein. Vielleicht ist es jetzt behoben?

  1. Nicht systemweit.
  2. Sie können es sichern.
  3. Es ist mit Gnome gebündelt.
Iain
quelle
2

Versuchen Sie es mit Beagle . Ich finde es ziemlich gut.

Möglicherweise werden nicht alle Anforderungen erfüllt, und ich bin mir nicht sicher, was das sein könnte. Unterstützen FIFO-Dateien beispielsweise erweiterte Attribute? Wenn sie dies nicht tun, Beagle hat eine Ausweich Datenbank.

pcapademic
quelle
Kann Beagle mit nicht regulären Dateien umgehen?
Charles Stewart
@ Charles Stewart - meinst du Nicht-Text-Dateien?
pcapademic
Nein, ich meine Gerätedateien, Symlinks, FIFOs usw.
Charles Stewart
Dieser Link bezieht sich nicht auf ein Projekt zur Organisation von Dokumenten.
Detly
1

Sie werden Nepomuk-Integration also nicht in Gnome, auf der Kommandozeile oder anderswo in Linux finden.

Umgekehrt werden Sie mit Tracker keine AFAIK-Integration von KDE finden. Ich bin mir in CLI nicht sicher.

Die Antwort scheint also leider "nein" zu sein.

Dies bedeutet leider auch nicht, dass es hier eine gute Gelegenheit gibt, eine zu bauen. Linux-Kommandozeilen-Dienstprogramme haben zum Beispiel nicht viel mit dem GUI-Dateimanager gemeinsam, so dass es architektonisch keine gemeinsame Komponente gibt, die zur Unterstützung des Konzepts erweitert werden könnte.

pbr
quelle
0

Ich habe ein kleines Programm erstellt, das SQLite für diesen Zweck verwendet. Es hat mein Bedürfnis gelöst, aber vielleicht hilft es Ihnen auch:

https://github.com/alvatar/dfym

Das einzige Problem bei diesem Ansatz ist, dass keine Synchronisierung mit Verschiebungen und Löschvorgängen erfolgt, das Problem jedoch für relativ statische Dateien behoben wird.

alvatar
quelle
0

TMSU

TMSU ist ein Tool zum Markieren Ihrer Dateien. Es bietet ein einfaches Befehlszeilendienstprogramm zum Anwenden von Tags und ein virtuelles Dateisystem, mit dem Sie eine tagbasierte Ansicht Ihrer Dateien von jedem anderen Programm aus erhalten.

TMSU ändert Ihre Dateien in keiner Weise: Sie bleiben unverändert auf der Festplatte oder im Netzwerk, wo immer Sie sie ablegen. TMSU unterhält eine eigene Datenbank und Sie erhalten einfach eine zusätzliche Ansicht, die Sie basierend auf den von Ihnen eingerichteten Tags an beliebiger Stelle einhängen können.

Überrascht hat es niemand erwähnt.

justsomeguy
quelle
1
du hast es verpasst ... es ist die am höchsten bewertete Antwort
Kugelfisch
-1

Ich schlage vor, ein Versionskontrollsystem wie Subversion für diese Art von Funktionen über das Dateisystem hinaus in Betracht zu ziehen. Einige passen besser zu Ihnen als andere, aber im Allgemeinen:

  • Viele unterstützen Tagging (sicherlich Subversion).
  • Viele sind plattformübergreifend; Windows, Mac, Linux, so ziemlich alle Unixe.
  • Viele haben sowohl GUI-Frontends als auch Befehlszeilen-Clients.
  • Viele haben bereits Bindungen für Ihre Lieblingsprogrammiersprache.
  • Viele sind leicht zu sichern.
  • Viele sind so konzipiert, dass sie auf die eine oder andere Weise sehr leicht geteilt werden können.
  • In vielen Fällen können Sie den Zugriff steuern.
  • Sie müssen das Rad nicht neu erfinden.
    • Sie lernen und verwenden Standardbefehle / -tools, die bereits von Millionen verwendet werden.
  • Sie können es noch heute für Ihr Lieblings-Betriebssystem-Repository installieren. Apt-Get installieren, yum installieren
  • Sie erhalten auch die Versionsverwaltung "kostenlos".

Ein cli Beispiel mit 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

Ich würde nicht empfehlen, diese Tools für große (Gigabyte) regelmäßig wechselnde Binärdateien zu verwenden, aber für alles andere sind sie bereits bewährt und lassen sich auf sehr große Größen skalieren.

Colin
quelle