Existe uma maneira conveniente de converter a saída do comando * nix "tree" para o formato JSON?
Edit: Eu acho que não descrevi o meu problema o suficiente. Meu objetivo é converter algo como:
.
|-- dir1
| |-- dirA
| | |-- dirAA
| | `-- dirBB
| `-- dirB
`-- dir2
|-- dirA
`-- dirB
para dentro:
{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
text-processing
tree
json
roundrobin
fonte
fonte
dir1/dirA
tivesse subdiretórios?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
tree
comando não é a ferramenta certa. Eu posso estar inclinado a fazerls -R
ou emfind
vez disso.Respostas:
Tentativa 1
Uma solução usando apenas perl, retornando uma estrutura simples de hash de hashes. Antes do OP esclarecer o formato de dados do JSON.
File::Find
O módulo funciona de maneira semelhante aofind
comando unix . OJSON
módulo pega variáveis perl e as converte em JSON.Irá iterar a estrutura do arquivo do diretório de trabalho atual, chamando a sub-rotina
process_dir
para cada arquivo / diretório em ".", E o comandono_chdir
perl para não emitir umchdir()
para cada diretório encontrado.process_dir
retorna se o presente arquivo examinado não for um diretório:Em seguida, pegue uma referência do hash existente
%$dirs
em$ref
, dividir a volta caminho do arquivo/
e laço comfor
a adição de uma nova chave de hash para cada caminho.Criando uma estrutura de diretórios como slm fez:
A saída é:
Tentativa 2
Ok, agora com estrutura de dados diferente ...
E, em seguida, executando o script na estrutura de diretórios proposta ...
Achei isso muito complicado de acertar (especialmente considerando a lógica "hash if subdiretórios, array caso contrário, OH, A menos que o nível superior, e depois use hashes de qualquer maneira"). Então, eu ficaria surpreso se isso fosse algo que você pudesse fazer com
sed
/awk
... mas então Stephane ainda não olhou para isso, aposto :)fonte
A versão 1.7 inclui suporte para JSON:
http://mama.indstate.edu/users/ice/tree/changes.html
Pela
man
página (abaixoXML/JSON/HTML OPTIONS
):por exemplo
fonte
Aqui está uma maneira de usar o Perl e o módulo JSON perl.
Exemplo
Crie alguns dados de amostra.
Aqui está o que parece:
Aqui está uma corrida usando o comando Perl:
O que retorna esta saída:
NOTA: Este é apenas um encapsulamento da saída de
tree
. Não é uma hierarquia aninhada. O OP mudou a questão depois que eu sugeri isso!fonte
Eu também estava procurando uma maneira de gerar uma pasta / árvore de arquivos linux para algum arquivo JSON ou XML. Por que não usar este comando simples do terminal:
Portanto, apenas o
tree
comando Linux e configure seus próprios parâmetros. Aqui-X
fornece saída XML. Para mim, tudo bem, e acho que há algum script para converter XML em JSON.fonte
Você pode tentar este comando:
Substitua o nome do arquivo pelo nome do arquivo de saída desejado.
fonte
J
para o comandotree
!!Isso faz o trabalho. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
fonte