¿Hay alguna forma conveniente de convertir la salida del comando "árbol" * nix al formato JSON?
Editar: creo que no describí mi problema lo suficientemente bien. Mi objetivo es convertir algo como:
.
|-- dir1
| |-- dirA
| | |-- dirAA
| | `-- dirBB
| `-- dirB
`-- dir2
|-- dirA
`-- dirB
dentro:
{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
text-processing
tree
json
roundrobin
fuente
fuente

dir1/dirAsubdirectorios?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}treecomando no es la herramienta correcta. Podría estar inclinado a hacerls -Ro unfinden su lugar.Respuestas:
Intento 1
Una solución que usa solo perl, que devuelve una estructura simple de hash de hashes. Antes de que el OP aclarara el formato de datos de JSON.
File::FindEl módulo funciona de manera similar alfindcomando unix . ElJSONmódulo toma variables perl y las convierte en JSON.Recorrerá la estructura de archivos desde el directorio de trabajo actual llamando a la subrutina
process_dirpara cada archivo / directorio en ".", Y leno_chdirindicará a perl que no emita unchdir()para cada directorio que encuentre.process_dirdevuelve si el archivo examinado actual no es un directorio:A continuación, cogemos una referencia del hash existentes
%$dirsen$ref, dividimos el torno ruta del archivo/y el lazo conforla adición de una nueva clave hash para cada ruta.Hacer una estructura de directorio como slm hizo:
El resultado es:
Intento 2
Bien ahora con diferente estructura de datos ...
Y luego ejecutando el script en la estructura de directorios propuesta ...
Encontré esto bastante difícil de entender (especialmente dado el "hash si subdirectorios, matriz si no, OH A MENOS nivel superior, entonces solo hashes de todos modos" lógica). Así que me sorprendería si esto fuera algo que pudieras hacer con
sed/awk... pero entonces Stephane aún no ha mirado esto, apuesto :)fuente
La versión 1.7 incluye soporte para JSON:
http://mama.indstate.edu/users/ice/tree/changes.html
Por la
manpágina (debajoXML/JSON/HTML OPTIONS):p.ej
fuente
Aquí hay una forma de usar Perl y el módulo JSON perl.
Ejemplo
Crea algunos datos de muestra.
Así es como se ve:
Aquí hay una carrera con el comando Perl:
Lo que devuelve esta salida:
NOTA: Esto es solo una encapsulación de la salida de
tree. No es una jerarquía anidada. ¡El OP cambió la pregunta después de que sugerí esto!fuente
También estaba buscando una forma de generar una carpeta de Linux / árbol de archivos en algún archivo JSON o XML. ¿Por qué no usar este simple comando de terminal?
Entonces, solo el
treecomando Linux , y configura tus propios parámetros. Aquí-Xda salida XML. Para mí, está bien, y supongo que hay algún script para convertir XML a JSON.fuente
Puedes probar este comando:
Reemplace el nombre del archivo con el nombre del archivo de salida deseado.
fuente
Jpara el comandotree!Esto hace el trabajo. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
fuente