“树”命令输出和“纯”(7位)ASCII输出


44

“ tree”命令使用漂亮的方框绘图字符来显示树,但我想在“与代码页无关的”上下文中使用输出(我知道确实总是有一个代码页,但是将其限制在较低的位置角色,我希望不必担心Ulan Bator中有人看到笑脸等)。

例如,代替:

├── include
│   ├── foo
│   └── bar

我想要类似的东西:

+-- include
|   +-- foo
|   \-- bar

但我尝试过的所有“树”开关组合都没有提供此功能(似乎更像是将盒装绘制字符作为基线并使它更漂亮)

我还寻找盒式绘图过滤器来执行这种转换,而没有找到无穷无尽的ASCII艺术:-)。通用过滤器闻起来像需要15分钟才能煮熟的东西-再加上两天的累累,陷入所有有趣的极端情况中


谢谢你的问题。我需要这个,所以我可以将树的输出传送到enscript以获取打印格式的控制(使用来自我的duplexpr包sourceforge.net/projects/duplexpr/的 dprint / dprintm )
Joe

Answers:


59

我对此不确定,但我认为您所需要的只是

tree | sed 's/├/\+/g; s/─/-/g; s/└/\\/g'

例如:

$ tree
.
├── file0
└── foo
    ├── bar
    │   └── file2
    └── file1

2 directories, 3 files
$ tree | sed 's/├/\+/g; s/─/-/g; s/└/\\/g'
.
+-- file0
\-- foo
    +-- bar
    │   \-- file2
    \-- file1

2 directories, 3 files

或者,您可以使用以下--charset选项:

$ tree --charset=ascii
.
|-- file0
`-- foo
    |-- bar
    |   `-- file2
    `-- file1

2 directories, 3 files

没有GNU tree,没有Unix tree,没有POSIX treetree我知道的唯一实现是mama.indstate.edu/users/ice/tree
斯特凡Chazelas

3
@StephaneChazelas谢谢,因此该--charset选项应该始终可用。答案已编辑。
terdon

灿烂!(特别是sed版本-对我而言,sed是awk边界以外的荒野)
Tom Goodfellow 2014年

1
我喜欢树的--charset = ascii选项,谢谢
ling

4
实际上,我认为--charset应该首先提到该选项-替代方法sed具有指导意义,但更为复杂...
rob74年6

30

tree --charset unicode

|-- boot_print
|   |-- config-2.6.32-5-amd64
|   |-- grub
|   |   |-- 915resolution.mod
|   |   |-- acpi.mod
|   |   |-- affs.mod
|   |   |-- afs_be.mod
|   |   |-- afs.mod
|   |   |-- aout.mod
|   |   |-- ata.mod
|   |   |-- ata_pthru.mod
|   |   |-- at_keyboard.mod
|   |   |-- befs_be.mod
|   |   |-- befs.mod
|   |   |-- biosdisk.mod
|   |   |-- bitmap.mod
|   |   |-- bitmap_scale.mod
|   |   |-- blocklist.mod
|   |   |-- boot.img

2
这是一样的tree --charset nwildner
斯特凡Chazelas

对。另一个答案已经过编辑,因此,我写我的文章时,我没有注意到@terdon提供了更完整的答案;)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.