Apakah ada perintah linux yang bisa saya panggil dari skrip Bash yang akan mencetak struktur direktori dalam bentuk pohon, misalnya,
folder1
a.txt
b.txt
folder2
folder3
Apakah ada perintah linux yang bisa saya panggil dari skrip Bash yang akan mencetak struktur direktori dalam bentuk pohon, misalnya,
folder1
a.txt
b.txt
folder2
folder3
Jawaban:
Apakah ini yang Anda cari pohon ? Itu harus di sebagian besar distribusi (mungkin sebagai instalasi opsional).
~> tree -d /proc/self/
/proc/self/
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/fd
|-- fdinfo
|-- net
| |-- dev_snmp6
| |-- netfilter
| |-- rpc
| | |-- auth.rpcsec.context
| | |-- auth.rpcsec.init
| | |-- auth.unix.gid
| | |-- auth.unix.ip
| | |-- nfs4.idtoname
| | |-- nfs4.nametoid
| | |-- nfsd.export
| | `-- nfsd.fh
| `-- stat
|-- root -> /
`-- task
`-- 15589
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/task/15589/fd
|-- fdinfo
`-- root -> /
27 directories
sampel diambil dari halaman web pengelola.
Anda dapat menambahkan opsi di -L #
mana #
diganti dengan angka, untuk menentukan kedalaman rekursi maksimum.
Hapus -d
juga untuk menampilkan file.
-d
untuk menampilkan file!
brew install tree
apt-cyg install tree
(dengan asumsi Anda telah menginstal apt-cyg)
apt-get install tree
akan menginstalnya.
Anda bisa menggunakan ini:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Ini akan menampilkan representasi grafis dari sub-direktori saat ini tanpa file dalam beberapa detik , misalnya dalam /var/cache/:
.
|-apache2
|---mod_cache_disk
|-apparmor
|-apt
|---archives
|-----partial
|-apt-xapian-index
|---index.1
|-dbconfig-common
|---backups
|-debconf
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
.git
?
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Untuk menambahkan solusi Hassou ke .bashrc Anda, coba:
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"''
Perintah ini berfungsi untuk menampilkan folder dan file .
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Contoh output:
.
|-trace.pcap
|-parent
| |-chdir1
| | |-file1.txt
| |-chdir2
| | |-file2.txt
| | |-file3.sh
|-tmp
| |-json-c-0.11-4.el7_0.x86_64.rpm
Sumber: Komentar dari @javasheriff di sini . Ini terendam sebagai komentar dan mempostingnya sebagai jawaban membantu pengguna menemukannya dengan mudah.
find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
bekerja dengan baik
Saya menyiapkan output dari jawaban @ Hassou dengan:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'
Ini seperti output dari tree
sekarang:
.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh
Anda juga dapat membuat alias:
alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''
BTW, tree
tidak tersedia di beberapa lingkungan, seperti MinGW. Jadi alternatifnya sangat membantu.
Anda juga dapat menggunakan kombinasi perintah find dan awk untuk mencetak pohon direktori. Untuk detailnya, silakan merujuk ke " Cara mencetak struktur direktori multilevel tree menggunakan perintah linux find and awk gabungan "
find . -type d | awk -F'/' '{
depth=3;
offset=2;
str="| ";
path="";
if(NF >= 2 && NF < depth + offset) {
while(offset < NF) {
path = path "| ";
offset ++;
}
print path "|-- "$NF;
}}'
find
. Ataufind . -not -path '*/\.*'
untuk menyembunyikan file dan folder yang dimulai dengan.
. Jika Anda ingin memiliki keluaran dengan spasi, seperti dalam pertanyaan, gunakan dengan skrip "find prettifier" ini:find . -not -path '*/\.*' | python -c "import sys as s;s.a=[];[setattr(s,'a',list(filter(lambda p: c.startswith(p+'/'),s.a)))or (s.stdout.write(' '*len(s.a)+c[len(s.a[-1])+1 if s.a else 0:])or True) and s.a.append(c[:-1]) for c in s.stdin]"