Ich habe gerade eine Alpha meines neuen Programms veröffentlicht, das versucht, diese Funktionalität bereitzustellen. Es erfüllt derzeit einige, aber nicht alle Ihrer Anforderungen. Es könnte Sie trotzdem interessieren. Es bietet ein Befehlszeilentool zum Markieren und ein virtuelles Dateisystem zum Durchsuchen (wobei Tags durch Verzeichnisse dargestellt werden).
http://www.tmsu.org/
jede vom Benutzer lesbare Datei kann frei getaggt werden
Ja.
ein Benutzer kann nach Dateien suchen, die einem oder mehreren Tags entsprechen
Ja. Entweder über das Kommandozeilen-Tool oder durch Durchsuchen der Tag-Verzeichnisse im virtuellen Dateisystem.
Dateien können verschoben werden, ohne dass die zuvor zugeordneten Tags verloren gehen
Nein. Die Anwendung speichert jedoch Fingerabdrücke der markierten Dateien, die verwendet werden, um verschobene Dateien zu identifizieren. Es wird ein „Reparatur“-Befehl bereitgestellt, der die Pfade verschobener Dateien aktualisiert. (Offensichtlich bricht dieser Mechanismus zusammen, wenn eine Datei sowohl verschoben als auch geändert wird.)
das System konnte leicht gesichert werden
Ja. Es ist eine einfache Sqlite 3-Datenbankdatei.
keine Abhängigkeiten von irgendeiner Desktop-Umgebung
Ja. Keine Abhängigkeiten und da es als virtuelles Dateisystem ausgeführt werden kann, ist es als Dateisystem in jedem Programm verfügbar, das symbolische Links unterstützt.
Wenn eine GUI involviert ist, muss es einen CLI-Fallback geben
Derzeit keine GUI.
Es ist nicht klar, welche Art von Suche Sie möchten. Wenn Sie möchten, dass es überall in Unix funktioniert, anstatt nur in Ihrem Home-Verzeichnis, und Sie nur Pfadnamen-basierte Suchen durchführen möchten, ist das folgende Schema praktikabel, mit ein wenig Shell-Hackery und unter Verwendung des Standard-locatedb
:
- Jedes Verzeichnis, das mindestens eine getaggte Datei enthält, benötigt ein Standard-Unterverzeichnis, sagen wir
.path-tags
; - Jede Datei im Verzeichnis $FILE mit Link $TAG (der das Zeichen
_
nicht enthalten sollte ) hat einen Link$TAG_$FILE -> ../$FILE
Ich hinterlasse die Details des locate-tag
Skript für Sie; es sollte ein Zwei- oder Dreizeiler sein und nur den locate
verwenden Befehls- und Shell-Hackery. (Wenn Sie interessiert sind, könnte ich eine schreiben).
Einige der KDE-Leute sprachen über diese Art Schema für Metadaten, obwohl ich mich nicht an die Details erinnere.
Es sollte auch möglich sein, anspruchsvollere, inhaltsprüfende Tests basierend auf diesem Schema mit einem ähnlichen Skript durchzuführen, das um find
gewickelt ist .
Gedanken zu aktualisierten Anforderungen
- jede vom Benutzer lesbare Datei kann frei getaggt werden - Ja, sollte kein Problem sein
- ein Benutzer kann nach Dateien suchen, die einem oder mehreren Tags entsprechen - Ebenso
- Dateien können verschoben werden, ohne dass die zuvor zugeordneten Tags verloren gehen - Die Verzeichnisse, in denen sie sich befinden, können frei verschoben werden, aber wenn die Datei aus dem Verzeichnis verschoben wird, haben wir Probleme. Wenn die Tags das Format
$TAG_$INODE_$FILE
hätten und wir haben einen effizienten Weg, um herauszufinden, welche Pfade einen bestimmten Inode haben, dann können wir dies tun, wobei wir Tags nur verlieren, wenn wir uns aus Dateisystemen bewegen. Das Kopieren von Dateien kann einige Probleme verursachen, und dies ist deutlich komplizierter als mein ursprünglicher Vorschlag. - das System konnte einfach gesichert werden - nicht wesentlich schwierig.
- keine Abhängigkeiten von irgendeiner Desktop-Umgebung - keine
- Wenn eine GUI involviert ist, muss es einen CLI-Fallback geben - da wohnen wir!
Nachschrift Die Datei "Reverse-Inode-Lookup", 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 auf der 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 zeigt. Wenn es keine Übereinstimmung gibt, kann die erforderliche Operation durchgeführt werden (existiert der Inode noch? Wo ist er?), und die Reverse-Lookup-Datei wird entweder mutiert oder neu generiert und die Tag-Symlinks werden aktualisiert.
Ich rechne mit einem kniffligen Fall:Was ist, wenn sich die markierte Datei nicht dort befindet, wo die Tags sie angeben sollten, die Reverse-Lookup-Datei sagt, dass sie noch existiert, aber die verlorene Datei nicht dort ist, wo die Lookup-Datei sie sagt, da die Lookup-Datei aus ist? Datum? Es gibt einige Möglichkeiten, diesen Fall zu handhaben, von denen keine offensichtlich ideal ist. Abgesehen davon scheint diese ganze Aufgabe etwas zu sein, wofür Perl gut geeignet ist...
Niemand hat es erwähnt, aber Sie sollten sich auf jeden Fall die erweiterten Dateisystemattribute ansehen. ext4 zum Beispiel hat sie. es gibt die Werkzeuge getfattr und setfattr, um damit umzugehen. Natürlich müssen Sie einige Shell-Skripte schreiben, um nach Dateien zu suchen, die mit irgendeinem Tag gekennzeichnet sind. Bezüglich der erwähnten Fragen sind alle Antworten "Ja". Sie sollten nur berücksichtigen, dass es vom Dateisystem abhängt.