Gibt es eine bequeme Möglichkeit, die Ausgabe des * nix-Befehls "tree" in das JSON-Format zu konvertieren?
Edit: Ich glaube, ich habe mein Problem nicht gut genug beschrieben. Mein Ziel ist es, etwas zu konvertieren wie:
.
|-- dir1
| |-- dirA
| | |-- dirAA
| | `-- dirBB
| `-- dirB
`-- dir2
|-- dirA
`-- dirB
in:
{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
text-processing
tree
json
Roundrobin
quelle
quelle
dir1/dirA
Unterverzeichnisse hätten?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
tree
Befehl ist nicht das richtige Werkzeug. Ich könnte dazu geneigt seinls -R
oderfind
stattdessen.Antworten:
Versuch 1
Eine Lösung, die nur Perl verwendet und eine einfache Hash-of-Hash-Struktur zurückgibt. Vor dem OP wurde das Datenformat von JSON geklärt.
File::Find
Das Modul funktioniert ähnlich wie der Unix-find
Befehl. DasJSON
Modul nimmt Perl-Variablen und konvertiert sie in JSON.Durchläuft die Dateistruktur aus dem aktuellen Arbeitsverzeichnis, wobei die Unterroutine
process_dir
für jede Datei / jedes Verzeichnis unter "."no_chdir
Aufgerufen wird , und weist das Perl an, nichtchdir()
für jedes gefundene Verzeichnis ein a auszugeben.process_dir
Gibt zurück, wenn die aktuell untersuchte Datei kein Verzeichnis ist:Wir greifen dann auf eine Referenz des vorhandenen Hashs
%$dirs
zu$ref
, teilen den Dateipfad auf/
und führen eine Schleife durch,for
indem wir für jeden Pfad einen neuen Hash-Schlüssel hinzufügen.Erstellen einer Verzeichnisstruktur wie bei slm:
Die Ausgabe ist:
Versuch 2
Okay jetzt mit unterschiedlicher Datenstruktur ...
Und dann das Skript auf der vorgeschlagenen Verzeichnisstruktur ausführen ...
Ich fand es verdammt schwierig, das richtig zu machen (besonders angesichts der Logik "Hash wenn Unterverzeichnisse, Array wenn nicht, OH UNLESS Top Level, dann nur Hashes"). Ich wäre also überrascht, wenn Sie damit etwas anfangen könnten
sed
/awk
... aber Stephane hat sich das noch nicht angesehen, wette ich :)quelle
Version 1.7 unterstützt JSON:
http://mama.indstate.edu/users/ice/tree/changes.html
Auf der
man
Seite (unterXML/JSON/HTML OPTIONS
):z.B
quelle
Hier ist eine Möglichkeit, Perl und das JSON-Perl-Modul zu verwenden.
Beispiel
Erstellen Sie einige Beispieldaten.
So sieht es aus:
Hier ist ein Lauf mit dem Perl-Befehl:
Welches gibt diese Ausgabe zurück:
HINWEIS: Dies ist nur eine Kapselung der Ausgabe von
tree
. Keine verschachtelte Hierarchie. Das OP hat die Frage geändert, nachdem ich dies vorgeschlagen habe!quelle
Ich suchte auch nach einer Möglichkeit, einen Linux-Ordner / Dateibaum in eine JSON- oder XML-Datei auszugeben. Warum nicht diesen einfachen Terminalbefehl verwenden:
Also nur den Linux-
tree
Befehl und konfigurieren Sie Ihre eigenen Parameter. Hier-X
gibt XML-Ausgabe. Für mich ist das in Ordnung, und ich denke, es gibt ein Skript zum Konvertieren von XML in JSON.quelle
Sie könnten diesen Befehl versuchen:
Ersetzen Sie den Dateinamen durch den gewünschten Namen der Ausgabedatei.
quelle
J
für den Befehltree
!!Das macht den Job. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
quelle