Salida del comando "árbol" con salida ASCII "pura" (7 bits)

44

El comando "árbol" utiliza buenos caracteres de dibujo de recuadros para mostrar el árbol, pero quiero usar la salida en un contexto "neutral en la página de códigos" (sé que realmente siempre hay una página de códigos, pero restringiéndola a la parte inferior personajes espero no tener preocupaciones de que alguien en Ulan Bator vea caras sonrientes, etc.

Por ejemplo en lugar de:

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

Me gustaría algo como:

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

pero ninguna de las combinaciones de interruptor de "árbol" que probé dio esto (parece más como si tomaran los caracteres de dibujo de caja como la línea de base y la hagan aún más bonita)

También busqué filtros de dibujo de caja para realizar tales conversiones sin encontrar nada más allá de una cantidad infinita de arte ASCII :-). Un filtro genérico huele a algo que debe cocinarse en 15 minutos, más dos días incrementales más que se topan con todos los divertidos casos de esquina :-)

Tom Goodfellow
fuente
Gracias por la pregunta Necesitaba esto para poder canalizar la salida del árbol en enscript para obtener el control del formato de impresión (usando dprint / dprintm de mi paquete duplexpr sourceforge.net/projects/duplexpr/. )
Joe

Respuestas:

60

No estoy seguro de esto, pero creo que todo lo que necesitas es

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

Por ejemplo:

$ 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

Alternativamente, puede usar la --charsetopción:

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

2 directories, 3 files
terdon
fuente
No hay GNU tree, no hay Unix tree, no hay POSIX tree. La única treeimplementación que conozco es mama.indstate.edu/users/ice/tree .
Stéphane Chazelas
3
@StephaneChazelas gracias, por lo que la --charsetopción siempre debería estar disponible en ese momento. Respuesta editada.
terdon
¡Espléndido! (especialmente la versión sed - para mí sed son las tierras salvajes más allá de la frontera awk)
Tom Goodfellow
1
Me gusta el árbol --charset = opción ascii, gracias
ling
44
En realidad, creo que la --charsetopción debería mencionarse primero: el uso alternativo sedes instructivo, pero más complicado ...
rob74
30

¿Qué hay de 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

fuente
2
Es lo mismo quetree --charset nwildner
Stéphane Chazelas
Sip. La otra respuesta fue editada, así que no me di cuenta de que @terdon dio una respuesta más completa mientras escribía la mía;)