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


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

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

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;)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.