如何控制“tree -F”命令的输出?

如何控制“tree -F”命令的输出?

我正在使用“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命令,使得它只会将“/”添加到目录行,而不会添加其他内容,例如当前正在执行的“=”或“|”或“*”?

谢谢,

巴巴哥

答案1

要解析tree输出,您应该使用机器可读的输出,json例如tree -J

例如使用解析为 CSVPython并在 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)

跑步:

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

相关内容