Kann die logische Struktur eines Dateisystems (einschließlich Symlink-Zielen) in einer einzelnen Lightweight-Datei (nicht binär) dargestellt werden?

781
Sridhar-Sarnobat

Nachdem ich im Laufe der Jahre mit mehreren SQL- und NoSQL-Datenbanken gespielt hatte, ist es meiner Meinung nach der beste Weg, um die Portabilität in meinen persönlichen, datenorientierten Apps sicherzustellen, alle bonafide Datenbanken vollständig zu vermeiden. Ich sehe das Dateisystem als ein schönes Datenbank-Paradigma, das portabel und lesbar ist und somit eine lange Lebensdauer hat, die für die Art der persönlichen Anwendungen, die ich schreibe, ausreichend ist. Es ist wie eine Diagrammdatenbank, die eine Baumstruktur erzwingt (gut für die Partitionierung), wobei Symlinks viele-zu-eins-Beziehungen darstellen.

Gibt es eine Möglichkeit, die gesamte Dateisystemtopologie als einzelne Datei zu exportieren? Die Ausgabe eines findBefehls ist vielversprechend, aber es gibt keine standardisierte Methode zum Exportieren der Daten, die angeben, worauf ein Symlink verweist. Ich möchte nicht meine persönliche Wahl des findAusgabeformats treffen:

/home/me/photos/beach/me_and_my_dog.jpg -> /home/me/photos/beach/1.jpg 

wenn zuvor bereits jemand ein Dateisystem-Topologieexportformat erstellt hat.

Ein weiterer Kandidat ist eine JSON-Datei:

home : [{ me : [{ photos : [{ beach : [{ 1.jpg, { me_and_my_dog.jpg : ./1.jpg } }] }] } }] 

Aber auch hier gibt es mehrere Möglichkeiten, Dateitypen darzustellen, und ich frage mich, ob bereits jemand einen Standard erstellt hat.

Beachten Sie, dass ich den Inhalt von Dateien nicht exportieren möchte. Dies würde den Export viel größer machen als nötig.

12

2 Antworten auf die Frage

14
heavyd

Die Ausgabe des treeBefehls scheint anzuzeigen, wonach Sie suchen:

. └── photos └── beach ├── 1.jpg -> me_and_dog.jpg └── me_and_dog.jpg 

Neuere Versionen des Befehls werden sogar in HTML, XML oder JSON ausgegeben.

XML-Ausgabe:

<?xml version="1.0" encoding="UTF-8"?> <tree> <directory name="."> <directory name="photos"> <directory name="beach"> <link name="1.jpg" target="me_and_dog.jpg"></link> <file name="me_and_dog.jpg"></file> </directory> </directory> </directory> <report> <directories>2</directories> <files>2</files> </report> </tree> 
Oh wow, genau das will ich. Ich wusste von dem `Tree'-Befehl (was großartig ist), wusste aber nicht, dass er jetzt analysierbare Formate unterstützt. Sridhar-Sarnobat vor 9 Jahren 2
HINWEIS: Dieser `tree`-Befehl ist die Linux-Version. Die Windows-Version gibt immer nur den einfachen "Baum" aus. Cole Johnson vor 9 Jahren 1
2
user400344

Sie können dafür verwenden mtree. Weitere Informationen hierzu finden Sie unter www.freebsd.org/cgi/man.cgi?query=mtree&sektion=8&manpath=FreeBSD+6.3-RELEASE und code.google.com/p/mtree-port

mtree -c 

Es ist sehr vielseitig.

Das ist keine JSON-Ausgabe, wie ich persönlich bevorzuge, aber ich bin sicher, dass Mac-Benutzer die Tatsache zu schätzen wissen, dass sie eingebaut ist. Sridhar-Sarnobat vor 9 Jahren 0