Есть ли удобный способ преобразовать вывод команды * nix "tree" в формат JSON?
Изменить: я думаю, что я не описал свою проблему достаточно хорошо. Моя цель - преобразовать что-то вроде:
.
|-- dir1
| |-- dirA
| | |-- dirAA
| | `-- dirBB
| `-- dirB
`-- dir2
|-- dirA
`-- dirB
в:
{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
text-processing
tree
json
по-круговой
источник
источник
dir1/dirA
имели подкаталоги?{"dir1" : [{"dirA":["dirAA", "dirAB"]}, "dirB"], "dir2": ["dirA", "dirB"]}
tree
не правильный инструмент. Я мог бы быть склонен сделатьls -R
илиfind
вместо.Ответы:
Попытка 1
Решение, использующее только perl, возвращающее простой хэш структуры хэшей. Перед ОП уточняется формат данных JSON.
File::Find
Модуль работает аналогично команде Unixfind
.JSON
Модуль принимает перл переменные и преобразует их в формат JSON.Будет выполнять итерацию структуры файла из текущего рабочего каталога, вызывая подпрограмму
process_dir
для каждого файла / каталога в разделе ".", Иno_chdir
сообщать Perl не выдавать achdir()
для каждого каталога, который он найдет.process_dir
возвращает, если данный проверенный файл не является каталогом:Затем получить ссылку на существующий хэш
%$dirs
в$ref
, разделить путь к файлу вокруг/
и цикл сfor
добавлением нового хэш - ключ для каждого пути.Создание структуры каталогов, как сделал slm:
Выход:
Попытка 2
Хорошо, теперь с другой структурой данных ...
А затем запустить скрипт на предложенной структуре каталогов ...
Я нашел, что это чертовски сложно сделать правильно (особенно учитывая логику "hash if sub directory, array or not, OH UNLESS верхнего уровня, затем просто хэширует в любом случае"). Так что я был бы удивлен, если бы это было чем-то, что вы могли бы сделать с
sed
/awk
... но тогда Стефан еще не смотрел на это, я готов поспорить :)источник
Версия 1.7 включает поддержку JSON:
http://mama.indstate.edu/users/ice/tree/changes.html
На
man
странице (подXML/JSON/HTML OPTIONS
):например
источник
Вот один из способов использования Perl и модуля Perl JSON.
пример
Создайте пример данных.
Вот как это выглядит:
Вот прогон с использованием команды Perl:
Который возвращает этот вывод:
ПРИМЕЧАНИЕ. Это просто инкапсуляция вывода из
tree
. Не вложенная иерархия. ОП изменил вопрос после того, как я предложил это!источник
Я также искал способ вывода дерева папок / файлов linux в какой-нибудь файл JSON или XML. Почему бы не использовать эту простую команду терминала:
Итак, просто команда Linux
tree
, и настройте свои собственные параметры. Здесь-X
дает вывод XML. Для меня это нормально, и я предполагаю, что есть некоторый скрипт для преобразования XML в JSON.источник
Вы можете попробовать эту команду:
Замените имя файла на желаемое имя выходного файла.
источник
J
для командыtree
!!Это делает работу. https://gist.github.com/debodirno/18a21df0511775c19de8d7ccbc99cb72
источник