¿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/dirA
subdirectorios?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
tree
comando no es la herramienta correcta. Podría estar inclinado a hacerls -R
o unfind
en 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::Find
El módulo funciona de manera similar alfind
comando unix . ElJSON
mó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_dir
para cada archivo / directorio en ".", Y leno_chdir
indicará a perl que no emita unchdir()
para cada directorio que encuentre.process_dir
devuelve si el archivo examinado actual no es un directorio:A continuación, cogemos una referencia del hash existentes
%$dirs
en$ref
, dividimos el torno ruta del archivo/
y el lazo confor
la 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
man
pá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
tree
comando Linux , y configura tus propios parámetros. Aquí-X
da 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
J
para el comandotree
!Esto hace el trabajo. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
fuente