Sortie de la commande “tree” avec sortie ASCII “pure” (7 bits)

44

La commande "tree" utilise de jolis caractères de dessin de boîtes pour afficher l’arbre, mais je souhaite utiliser la sortie dans un contexte "neutre par rapport à la page de code" (je sais qu’il existe vraiment une page de code, mais en la limitant au minimum. J'espère ne pas craindre que des gens à Oulan-Bator voient des sourires, etc.).

Par exemple au lieu de:

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

Je voudrais quelque chose comme:

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

mais aucune des combinaisons de commutateurs "d'arbre" que j'ai essayées n'a donné ceci (semble plutôt comme si elles prenaient les caractères de dessin de boîte comme base et le rendaient encore plus joli)

J'ai également recherché des filtres de dessin de boîte pour effectuer de telles conversions sans rien trouver au-delà d'une quantité infinie d'art ASCII :-). Un filtre générique sent quelque chose à cuisiner en 15 minutes - plus deux jours supplémentaires qui décrochent dans tous les coins amusants :-)

Tom Goodfellow
la source
Merci pour la question. J'avais besoin de cela pour pouvoir canaliser la sortie de tree dans enscript afin d'obtenir le contrôle du format d'impression (en utilisant dprint / dprintm de mon paquet duplexpr sourceforge.net/projects/duplexpr/. )
Joe

Réponses:

60

Je ne suis pas sûr de cela, mais je pense que tout ce dont vous avez besoin

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

Par exemple:

$ 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

Alternativement, vous pouvez utiliser l' --charsetoption:

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

2 directories, 3 files
terdon
la source
Il n'y a pas de GNU tree, pas d'Unix tree, pas de POSIX tree. La seule treeimplémentation que je connaisse est mama.indstate.edu/users/ice/tree .
Stéphane Chazelas
3
@StephaneChazelas merci, l' --charsetoption devrait toujours être disponible à ce moment-là. Réponse modifiée.
terdon
Splendide! (surtout la version sed - pour moi sed, ce sont les terres sauvages au-delà de la frontière de awk)
Tom Goodfellow
1
J'aime l'arbre --charset = option ascii, merci
ling
4
En fait, je pense que l' --charsetoption devrait être mentionnée en premier - l'alternative d'utilisation sedest instructive, mais plus compliquée ...
rob74
30

Qu'en est- il 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

la source
2
C'est la même chose quetree --charset nwildner
Stéphane Chazelas
Ouaip. L’autre réponse a été modifiée, donc je n’ai pas remarqué que @terdon a donné une réponse plus complète pendant que j’écrivais la mienne;)