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 :-)

Tom Goodfellow
quelle
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
terdon
quelle
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

quelle
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;)