Saída do comando "tree" com saída ASCII "pura" (7 bits)

44

O comando "tree" usa bons caracteres de desenho de caixa para mostrar a árvore, mas eu quero usar a saída em um contexto "página de código neutra" (eu sei que realmente sempre há uma página de código, mas restringindo-a à parte inferior) personagens espero estar livre de preocupações de que alguém em Ulan Bator veja carinhas, etc).

Por exemplo, em vez de:

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

Eu gostaria de algo como:

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

mas nenhuma das combinações de comutador "árvore" que tentei forneceu isso (parece mais como se eles pegassem os caracteres de desenho de caixa como linha de base e o tornassem ainda mais bonito)

Também procurei filtros de desenho de caixa para realizar essas conversões sem encontrar nada além de uma quantidade infinita de arte ASCII :-). Um filtro genérico cheira a algo a ser preparado em 15 minutos - mais dois dias adicionais em todos os divertidos casos de canto :-)

Tom Goodfellow
fonte
Obrigado pela pergunta. Eu precisava disso para que eu pudesse canalizar a saída de árvore em enscript para obter contol da impressão formatação (usando DImprima / dprintm do meu pacote duplexpr sourceforge.net/projects/duplexpr/. )
Joe

Respostas:

59

Não tenho certeza disso, mas acho que tudo que você precisa é

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

Por exemplo:

$ 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

Como alternativa, você pode usar a --charsetopção:

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

2 directories, 3 files
terdon
fonte
Não há GNU tree, não há Unix tree, não há POSIX tree. A única treeimplementação que eu conheço é mama.indstate.edu/users/ice/tree .
Stéphane Chazelas
3
@StephaneChazelas obrigado, então a --charsetopção deve estar sempre disponível. Resposta editada.
terdon
Esplêndido! (especialmente a versão sed - para mim sed é as terras selvagens além da fronteira awk)
Tom Goodfellow
1
Eu gosto da árvore --charset = opção ascii, graças
ling
4
Na verdade eu acho que a --charsetopção deve ser mencionado em primeiro lugar - a alternativa usando sedé instrutiva, mas mais complicado ...
rob74
30

Que tal 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

fonte
2
É o mesmo quetree --charset nwildner
Stéphane Chazelas
Sim. A outra resposta foi editado por isso, i Não sofreu notado que @terdon deu uma resposta mais completa enquanto eu tenha escrito o meu;)