it-swarm.com.de

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

Ich habe nach einer Möglichkeit gesucht, meine Dateien mit Tags zu versehen und sie basierend auf diesen 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, hat aber immer noch einige Abhängigkeiten, die ich nicht mag ...

Ich habe etwas mehr nachgeforscht und der Weg dorthin könnte sehr gut erweiterte Dateiattribute sein.
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 möchte einige Gedanken über deren Verwendung hören, während ich mich an einigen Hacks versuche, obwohl dies möglicherweise eine neue Frage rechtfertigt.

68
julien

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, ist das folgende Schema mit ein wenig Shell-Hackery und dem Standard locatedb verwendbar:

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

Ich überlasse die Details des Skripts locate-tag Ihnen. Es sollte zwei- oder dreizeilig sein und nur den Befehl locate und Shell-Hackery verwenden. (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, das um find gewickelt ist.

Gedanken zu aktualisierten Anforderungen

  1. Jede vom Benutzer lesbare Datei kann frei markiert werden - Ja, sollte kein Problem sein
  2. Ein Benutzer kann nach Dateien suchen, die einem oder mehreren Tags entsprechen - Ebenso
  3. Dateien können verschoben werden, ohne die zuvor zugeordneten 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 $TAG_$INODE_$FILE haben und wir eine effiziente Möglichkeit haben , um herauszufinden, welche Pfade einen bestimmten Inode haben , können wir dies tun und nur dann Tags verlieren, wenn Wir rücken aus Dateisystemen heraus. 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 beteiligt ist, muss es einen CLI-Fallback geben - hier leben wir!

Postscript Die "Reverse-Inode-Lookup" -Datei, beschrieben durch den Link (2) , den Sie mir gezeigt haben in Ihrer Antwort auf (1) kann verwendet werden, um eine zusätzliche Infrastruktur zu geben. 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 nehme einen schwierigen Fall vorweg: Was passiert, wenn die mit Tags versehene Datei nicht an der Stelle ist, an der die Tags sie für angebracht halten? 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 ...

12
Charles Stewart

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, anhand derer 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.

22
Paul Ruane

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

TagSpaces

6
Dan Dascalescu

Ich denke, dies 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 alle Tags tatsächlich im Dateinamen enthalten sind, macht es trivial, Tags | Dateien über die CLI zu bearbeiten.

6
laramichaels

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.

5
alik

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

5
anon

Versuchen Sie Beagle . Ich finde es ziemlich gut.

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

2
pcapademic

Einige andere Alternativen sind möglicherweise tagasistant , tagfs oder Dantalian .

2
student

In diesem 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.
2
Iain

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

Umgekehrt werden Sie mit Tracker keine AFAIK für die KDE-Integration finden. Ich bin mir in CLI nicht sicher.

Die Antwort scheint also leider "nein" zu sein.

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

1
pbr

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.

0
alvatar

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.

0
justsomeguy