Befehlsausgabe "tree" mit "reiner" (7-Bit) ASCII-Ausgabe


44

Der Befehl "tree" zeigt den Baum mit schönen Box-Zeichen an, aber ich möchte die Ausgabe in einem "codepage-neutralen" Kontext verwenden Ich hoffe, dass ich keine Sorgen haben muss, dass jemand in Ulan Bator Smileys sieht, usw.).

Zum Beispiel anstelle von:

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

Ich hätte gerne etwas wie:

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

aber keine der "Baum" -Schaltkombinationen, die ich ausprobiert habe, hat dies gegeben (scheint eher so, als würden sie die Box-Zeichen als Grundlinie nehmen und es noch hübscher machen)

Ich habe auch nach Box-Drawing-Filtern gesucht, um solche Konvertierungen durchzuführen, ohne etwas zu finden, das über eine unendliche Menge an ASCII-Kunst hinausgeht :-). Ein allgemeiner Filter riecht nach etwas, das in 15 Minuten zubereitet werden muss - plus zwei weitere inkrementelle Tage, die in alle amüsanten Eckfälle stolpern :-)


Danke für die Frage. Ich brauchte dies, damit ich die Ausgabe von tree in enscript umleiten konnte, um die Kontrolle über die Druckformatierung zu erhalten (unter Verwendung von dprint / dprintm aus meinem Duplexpr-Paket sourceforge.net/projects/duplexpr/. )
Joe

Antworten:


59

Ich bin mir nicht sicher, aber ich denke alles was du brauchst ist

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

Zum Beispiel:

$ 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

Alternativ können Sie die --charsetOption verwenden:

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

2 directories, 3 files

Es gibt kein GNU tree, kein Unix tree, kein POSIX tree. Die einzige treemir bekannte Implementierung ist mama.indstate.edu/users/ice/tree .
Stéphane Chazelas

3
@StephaneChazelas danke, also sollte die --charsetOption dann immer verfügbar sein. Antwort bearbeitet.
Terdon

Herrlich! (vor allem die sed version - für mich sed ist das wilde land jenseits der awk grenze)
tom goodfellow

1
Ich mag die Option tree --charset = ascii, danke
ling

4
Eigentlich denke ich, dass die --charsetOption zuerst erwähnt werden sollte - die alternative Verwendung sedist lehrreich, aber komplizierter ...
rob74

30

Was ist 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
Das ist das Gleiche wietree --charset nwildner
Stéphane Chazelas

Jep. Die andere Antwort wurde so bearbeitet, dass ich nicht bemerkte, dass @terdon eine vollständigere Antwort gab, während ich meine geschrieben habe;)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.