Output perintah "tree" dengan output ASCII "murni" (7-bit)

44

Perintah "tree" menggunakan karakter menggambar kotak yang bagus untuk menunjukkan pohon tetapi saya ingin menggunakan output dalam konteks "code-page-neutral" (Saya tahu bahwa selalu ada halaman kode, tetapi dengan membatasi ke bagian bawah karakter saya berharap bebas dari kekhawatiran bahwa seseorang di Ulan Bator melihat wajah tersenyum, dll).

Misalnya, bukannya:

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

Saya ingin sesuatu seperti:

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

tetapi tidak ada kombinasi sakelar "pohon" yang saya coba berikan ini (tampaknya lebih seperti mereka mengambil karakter kotak gambar sebagai garis dasar dan membuatnya lebih cantik)

Saya juga mencari filter gambar kotak untuk melakukan konversi seperti itu tanpa menemukan sesuatu di luar jumlah ASCII art yang tak terbatas :-). Filter generik berbau seperti sesuatu yang akan dimasak dalam 15 menit - ditambah dua hari lagi tambahan tersandung ke dalam semua kasus sudut lucu :-)

Tom Goodfellow
sumber
Terima kasih untuk pertanyaannya. Saya membutuhkan ini sehingga saya bisa menyalurkan output tree ke dalam enkrip untuk mendapatkan contol dari format cetak (menggunakan dprint / dprintm dari paket duplexpr saya sourceforge.net/projects/duplexpr/. )
Joe

Jawaban:

59

Saya tidak yakin tentang ini tetapi saya pikir semua yang Anda butuhkan adalah

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

Sebagai contoh:

$ 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

Atau, Anda dapat menggunakan --charsetopsi:

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

2 directories, 3 files
terdon
sumber
Tidak ada GNU tree, tidak ada Unix tree, tidak ada POSIX tree. Satu-satunya treeimplementasi yang saya tahu adalah mama.indstate.edu/users/ice/tree .
Stéphane Chazelas
3
@StephaneChazelas terima kasih, jadi --charsetopsi harus selalu tersedia saat itu. Jawaban diedit.
terdon
Megah! (terutama versi sed - bagi saya sed adalah tanah liar di luar perbatasan awk)
Tom Goodfellow
1
Saya suka opsi pohon --charset = ascii, terima kasih
ling
4
Sebenarnya saya pikir --charsetpilihan harus disebutkan pertama - penggunaan alternatif sedadalah instruktif, tetapi lebih rumit ...
rob74
30

Bagaimana dengan 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

sumber
2
Itu sama dengantree --charset nwildner
Stéphane Chazelas
Ya. Jawaban lainnya diedit jadi, saya tidak memperhatikan bahwa @terdon memberikan jawaban yang lebih lengkap ketika saya telah menulis milik saya;)