Показать статистику
0 голосов
от (2.5тыс. баллов)

Я использую команду 'tree' для создания текстового файла, который анализирую в Libre Office Calc:

tree -ifsD --timefmt "%Y-%m-%d %T" $PWD > dirlist_tree.txt

Я добавил параметр -F, чтобы добавить / в конец строк каталога, чтобы помочь Calc с анализом:

tree -F -ifsD --timefmt "%Y-%m-%d %T" $PWD > dirlist_tree.txt

Из того, что мне удалось найти до сих пор, есть три дополнительных символа, которые эта опция может добавить к выводу. По крайней мере, один из них вызывает у меня некоторые проблемы, поэтому этот вопрос:

Как я могу ограничить команду tree -F  таким образом, чтобы она добавляла только '/' к строкам каталога и никакие другие, например '=' или '|' или '*', что он сейчас делает?

174 просмотров 1 ответов

1 Ответ

0 голосов
от (26.4тыс. баллов)

Чтобы проанализировать вывод tree, вы должны использовать машиночитаемый вывод, например 

json:tree -J

Например, синтаксический анализ в CSV с помощью Python, чтобы напрямую открыть в Libre Office Calc:

tree_to_csv.py
#!/usr/bin/env python3

import json,sys,csv
data = json.load(sys.stdin)

elements = []

def get_element(el):
    global elements
    if "size" in el:
        elements.append(el)
    if el["type"] == "directory":
        for sub_el in el["contents"]:
            get_element(sub_el)

for el in data: 
    get_element(el)

fieldnames = ['size', 'time', 'name']
writer = csv.DictWriter(sys.stdout, fieldnames=fieldnames, extrasaction='ignore')

writer.writeheader()

for el in elements:
    if el["type"] == "directory":
        el["name"] += '/'
    writer.writerow(el)

Run:

tree -Jsf  --timefmt "%Y-%m-%d %T" | python tree_to_csv.py
...