Вихід команди "дерево" з "чистим" (7-бітовим) ASCII виведенням


44

Команда "дерево" використовує симпатичні символи для малювання коробки, щоб показати дерево, але я хочу використовувати вихід у "нейтральному коді" контексті (я знаю, що насправді завжди є сторінка коду, але обмеживши її нижньою персонажів Я сподіваюся бути безтурботним, що хтось із Улан-Батора бачить усміхнені обличчя тощо).

Наприклад, замість:

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

Мені б хотілося чогось типу:

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

але жодна з комбінацій "дерева", яку я спробував, не дала цього (здається, більше, наче вони приймають символи для малювання коробки як базову лінію і роблять її ще красивішою)

Я також шукав фільтри для малювання коробки для таких перетворень, не знаходячи нічого, що перевищує нескінченну кількість мистецтва ASCII :-) Загальний фільтр пахне тим, що потрібно приготувати за 15 хвилин - плюс ще два покрокові дні, натрапляючи на всі кумедні куточки :-)


Дякую за запитання. Мені це знадобилося, щоб я міг передати висновок дерева у власність, щоб отримати контур форматування друку (використовуючи dprint / dprintm з мого пакету duplexpr sourceforge.net/projects/duplexpr/. )
Джо

Відповіді:


59

Я не впевнений у цьому, але думаю, що все що вам потрібно

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

Наприклад:

$ 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

Крім того, ви можете скористатися --charsetопцією:

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

2 directories, 3 files

Немає GNU tree, немає Unix tree, немає POSIX tree. Єдине про treeмене, що мені відомо, це mama.indstate.edu/users/ice/tree .
Стефан Шазелас

3
@StephaneChazelas спасибі, тому --charsetваріант завжди повинен бути доступним. Відповідь відредаговано.
terdon

Чудовий! (особливо версія sed - для мене sed - це дикі краї за межею awk)
Том Гудфллоу

1
Мені подобається дерево --charset = ascii варіант, спасибі
ling

4
Насправді я думаю, що --charsetспочатку слід згадати варіант - альтернативне використання sedє повчальним, але складніше ...
rob74

30

Про що 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
Це те саме, щоtree --charset nwildner
Стефан Шазелас

Так. Інша відповідь була відредагована так, я не помітив, що @terdon дав більш повну відповідь, коли я пишу мою;)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.