Czy istnieje wygodny sposób na konwersję danych wyjściowych polecenia „drzewo” * nix do formatu JSON?
Edycja: Myślę, że nie opisałem wystarczająco dobrze mojego problemu. Moim celem jest konwersja czegoś takiego:
.
|-- dir1
| |-- dirA
| | |-- dirAA
| | `-- dirBB
| `-- dirB
`-- dir2
|-- dirA
`-- dirB
w:
{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
text-processing
tree
json
roundrobin
źródło
źródło
dir1/dirA
miał podkatalogi?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
tree
Polecenie nie jest odpowiednim narzędziem. I może być skłonny zrobićls -R
albofind
zamiast.Odpowiedzi:
Próba 1
Rozwiązanie wykorzystujące tylko perl, zwracające prosty skrót struktury haszującej. Przed PO wyjaśniono format danych JSON.
File::Find
moduł działa w podobny sposób jakfind
polecenie unix .JSON
Moduł zajmuje zmienne Perl i konwertuje je do formatu JSON.Powtórzy strukturę pliku z obecnego katalogu roboczego, wywołując podprogram
process_dir
dla każdego pliku / katalogu pod „.”, Ino_chdir
powiedz perlowi, aby nie wydawał achdir()
dla każdego znalezionego katalogu.process_dir
zwraca, jeśli obecny badany plik nie jest katalogiem:Następnie zbieramy odniesienie do istniejącego skrótu
%$dirs
na$ref
, dzielimy ścieżkę pliku/
i zapętlamy,for
dodając nowy klucz skrótu dla każdej ścieżki.Utworzenie struktury katalogów takiej jak slm:
Dane wyjściowe to:
Próba 2
OK, teraz z inną strukturą danych ...
A następnie uruchomienie skryptu na proponowanej strukturze katalogów ...
Uważam, że to cholernie trudne do zrobienia (szczególnie biorąc pod uwagę logikę „hash, jeśli podkatalogi, tablica, jeśli nie, OH UNLESS najwyższy poziom, to i tak po prostu hash”). Byłbym zaskoczony, gdyby to było coś, co można zrobić z
sed
/awk
... ale Stephane jeszcze na to nie spojrzał, założę się :)źródło
Wersja 1.7 zawiera obsługę JSON:
http://mama.indstate.edu/users/ice/tree/changes.html
Na
man
stronie (poniżejXML/JSON/HTML OPTIONS
):na przykład
źródło
Oto jeden ze sposobów korzystania z Perla i modułu Perla JSON.
Przykład
Utwórz przykładowe dane.
Oto jak to wygląda:
Oto uruchomienie za pomocą polecenia Perl:
Który zwraca ten wynik:
UWAGA: Jest to tylko enkapsulacja danych wyjściowych z
tree
. Nie zagnieżdżona hierarchia. OP zmieniło pytanie po tym, jak to zasugerowałem!źródło
Szukałem również sposobu na wyjście z drzewa folderów / plików linuksa do jakiegoś pliku JSON lub XML. Dlaczego nie skorzystać z tego prostego polecenia terminala:
Więc po prostu
tree
polecenie Linux i skonfiguruj własne parametry. Tutaj-X
podaje dane wyjściowe XML. Dla mnie to w porządku i chyba jest jakiś skrypt do konwersji XML na JSON.źródło
Możesz spróbować tego polecenia:
Zamień nazwę pliku na żądaną nazwę pliku wyjściowego.
źródło
J
dla poleceniatree
!!To działa. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
źródło