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.
quelle
Antworten:
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
:.path-tags
._
) hat einen Link$TAG_$FILE -> ../$FILE
Ich überlasse
locate-tag
Ihnen die Details des Drehbuchs. Es sollte sich um einen Zwei- oder Dreizeiler handeln, bei dem nur derlocate
Befehl 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
$TAG_$INODE_$FILE
und 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.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 ...
quelle
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/
Ja.
Ja. Entweder über das Befehlszeilentool oder durch Durchsuchen der Tag-Verzeichnisse im virtuellen Dateisystem.
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.)
Ja. Es ist eine einfache Sqlite 3-Datenbankdatei.
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.
Derzeit keine GUI.
quelle
mv
,cp
undrm
die handhaben Ihre Tags als auch (nennen wir sie zum Beispieltmv
,tcp
undtrm
) , dann würde man keine Tags verlieren zumindest wenn man die Kommandozeile verwendet , um Dateien zu bewegen ...tmsu-fs-mv
,tmsu-fs-rm
undtmsu-fs-merge
.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.
quelle
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.
quelle
Erstaunt, dass niemand TagSpaces erwähnt hat . Es erfüllt alle Ihre Anforderungen, da Tags im Dateinamen gespeichert sind und TagSpaces plattformübergreifend sind.
quelle
Sie müssen wahrscheinlich nicht den gesamten KDE-Desktop für die Tagging-Bibliothek Nepomuk installieren. Sie müssten trotzdem KDE-Basisbibliotheken installieren ...
quelle
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?
quelle
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.
quelle
Einige andere Alternativen könnten tagasistant , tagfs oder dantalian sein .
quelle
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.
quelle
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.
quelle
TMSU
Überrascht hat es niemand erwähnt.
quelle
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:
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.
quelle