Сделайте команду дерева печатной и вместо & (и других специальных символов) в файле JSON - PullRequest
0 голосов
/ 18 марта 2020

У меня есть этот пример. Древовидная структура

TreeTest/
├── something?.txt
└── something&.txt

Я хочу сгенерировать файл JSON, чтобы использовать его в другом скрипте, и мне требуются точно такие же имена, поскольку они используются как ключи. Я прочитал человека и использовал эту команду tree -J -o tree.json TreeTest/, но она печатает

[
  {"type":"directory","name":"TreeTest/","contents":[
    {"type":"file","name":"something?.txt"},
    {"type":"file","name":"something&.txt"}
  ]},
  {"type":"report","directories":0,"files":2}
]

с & вместо &. Я пытался использовать tree -J -N -o tree.json TreeTest/ и tree -J --charset utf8 -o tree.json TreeTest/, но вывод был тот же. Как я могу сделать выходные данные точными именами, используя & и любые другие специальные символы, которые могут иметь эту проблему?

1 Ответ

3 голосов
/ 19 марта 2020

До тех пор, пока это не будет исправлено и развернуто везде:

tree . -J | recode html..utf8

Но это не удастся с "piña colada" или "你好"

Альтернатива perl работает со всеми:

tree . -J | perl -n -mHTML::Entities -e 'print HTML::Entities::decode_entities($_)'

Пример вывода:

[
  {"type":"directory","name":".","contents":[
    {"type":"file","name":"a"},
    {"type":"file","name":"a&"},
    {"type":"file","name":"<a>&c"},
    {"type":"file","name":"b"},
    {"type":"file","name":"c"},
    {"type":"file","name":"d"},
    {"type":"file","name":"e"},
    {"type":"file","name":"f"},
    {"type":"file","name":"filename.R10011.out"},
    {"type":"file","name":"g"},
    {"type":"file","name":"h"},
    {"type":"file","name":"i"},
    {"type":"file","name":"j"},
    {"type":"file","name":"k"},
    {"type":"file","name":"l"},
    {"type":"file","name":"piña colada"},
    {"type":"directory","name":"r","contents":[
    ]},
    {"type":"file","name":"你好"}
  ]},
  {"type":"report","directories":1,"files":17}
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...