Existe-t-il un moyen pratique de convertir la sortie de la "arborescence" de la commande * nix au format JSON?
Edit: Je pense que je n'ai pas assez bien décrit mon problème. Mon objectif est de convertir quelque chose comme:
.
|-- dir1
| |-- dirA
| | |-- dirAA
| | `-- dirBB
| `-- dirB
`-- dir2
|-- dirA
`-- dirB
dans:
{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
text-processing
tree
json
roundrobin
la source
la source
dir1/dirA
sous-répertoires?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
tree
commande n'est pas le bon outil. Je pourrais être enclin à fairels -R
ou à lafind
place.Réponses:
Tentative 1
Une solution utilisant juste perl, renvoyant un simple hachage de structure de hachage. Avant le format de données clarifié OP de JSON.
File::Find
module fonctionne de manière similaire à lafind
commande unix . LeJSON
module prend des variables perl et les convertit en JSON.Itère la structure de fichiers du répertoire de travail actuel en appelant le sous-programme
process_dir
de chaque fichier / répertoire sous ".", Etno_chdir
indique à perl de ne pas émettre de fichierchdir()
pour chaque répertoire qu'il trouve.process_dir
renvoie si le fichier examiné actuel n'est pas un répertoire:Nous saisissons alors une référence du hachage existant
%$dirs
dans$ref
REFENDU le chemin du fichier autour/
et boucle avec l'for
ajout d' une nouvelle clé de hachage pour chaque chemin.Faire une structure de répertoire comme slm a fait:
La sortie est:
Tentative 2
Bon maintenant avec une structure de données différente ...
Et puis exécuter le script sur la structure de répertoires proposée ...
J'ai trouvé ce sacrément difficile à obtenir correctement (surtout compte tenu de la logique "hachage si sous-répertoires, tableau sinon, OH UNLESS de niveau supérieur, puis hachage de toute façon"). Je serais donc surpris si c'était quelque chose que vous pourriez faire avec
sed
/awk
... mais alors Stéphane n'a pas encore regardé ça, je parie :)la source
La version 1.7 inclut la prise en charge de JSON:
http://mama.indstate.edu/users/ice/tree/changes.html
Par la
man
page (sousXML/JSON/HTML OPTIONS
):par exemple
la source
Voici une façon d'utiliser Perl et le module Perl JSON.
Exemple
Créez des exemples de données.
Voici à quoi ça ressemble:
Voici une course utilisant la commande Perl:
Qui renvoie cette sortie:
REMARQUE: il s'agit simplement d'une encapsulation de la sortie de
tree
. Pas une hiérarchie imbriquée. L'OP a changé la question après avoir suggéré cela!la source
Je cherchais également un moyen de sortir une arborescence de dossiers / fichiers Linux vers un fichier JSON ou XML. Pourquoi ne pas utiliser cette simple commande de terminal:
Donc, juste la
tree
commande Linux et configurez vos propres paramètres. Voici-X
une sortie XML. Pour moi, c'est OK, et je suppose qu'il y a un script pour convertir XML en JSON.la source
Vous pouvez essayer cette commande:
Remplacez le nom de fichier par le nom de votre fichier de sortie souhaité.
la source
J
pour la commandetree
!!Cela fait le travail. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
la source