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
:
- Jedes Verzeichnis, das mindestens eine mit Tags versehene Datei enthält, benötigt beispielsweise ein Standard-Unterverzeichnis
.path-tags
.
- Jede Datei im Verzeichnis $ FILE mit dem Link $ TAG (der das Zeichen nicht enthalten sollte
_
) 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 der locate
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
- Jede Datei, die vom Benutzer gelesen werden kann, kann frei markiert werden - Ja, sollte kein Problem sein
- kann ein Benutzer ein oder mehrere Tags für Dateien suchen passend - Ebenso
- 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_$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.
- Das System konnte leicht gesichert werden - nicht wesentlich schwierig.
- Keine Abhängigkeiten von einer Desktop-Umgebung - Keine
- 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 ...