Uscita del comando "albero" con uscita ASCII "pura" (7 bit)


44

Il comando "albero" usa simpatici caratteri di disegno a scatola per mostrare l'albero ma voglio usare l'output in un contesto "neutro di code-page" (so che in realtà c'è sempre una code page, ma limitandola alla parte inferiore personaggi spero di essere libero dalle preoccupazioni che qualcuno in Ulan Bator veda faccine, ecc.).

Ad esempio invece di:

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

Vorrei qualcosa come:

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

ma nessuna delle combinazioni di interruttori "albero" che ho provato ha dato questo (sembra più che prendano i caratteri di disegno come base e lo rendano ancora più carino)

Ho anche cercato filtri di disegno a scatola per eseguire tali conversioni senza trovare nulla al di là di una quantità infinita di arte ASCII :-). Un filtro generico ha l'odore di qualcosa da cucinare in 15 minuti - più altri due giorni incrementali inciampando in tutti i casi angolari divertenti :-)


Grazie per la domanda Ne avevo bisogno in modo da poter convogliare l'output di tree in enscript per ottenere il controllo della formattazione della stampa (usando dprint / dprintm dal mio pacchetto duplexpr sourceforge.net/projects/duplexpr/. )
Joe

Risposte:


60

Non ne sono sicuro, ma penso che tutto ciò di cui hai bisogno sia

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

Per esempio:

$ 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

In alternativa, è possibile utilizzare l' --charsetopzione:

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

2 directories, 3 files

Non c'è GNU tree, non c'è Unix tree, non c'è POSIX tree. L'unica treeimplementazione di cui sono a conoscenza è mama.indstate.edu/users/ice/tree .
Stéphane Chazelas,

3
@StephaneChazelas grazie, quindi l' --charsetopzione dovrebbe essere sempre disponibile allora. Risposta modificata.
terdon

Splendido! (specialmente la versione sed - per me sed sono le terre selvagge oltre la frontiera awk)
Tom Goodfellow

1
Mi piace l'albero --charset = opzione ASCII, grazie
ling

4
In realtà penso che l' --charsetopzione dovrebbe essere menzionata per prima - l'uso alternativo sedè istruttivo, ma più complicato ...
rob74

30

Che dire 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
È lo stesso ditree --charset nwildner
Stéphane Chazelas,

Sì. L'altra risposta è stata modificata così, non ho notato che @terdon ha dato una risposta più completa mentre ho scritto la mia;)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.