Dizin yapısını bir ağaç şeklinde yazdıracak bir Bash betiğinden çağırabileceğim herhangi bir linux komutu var mı, örneğin,
folder1
a.txt
b.txt
folder2
folder3
Dizin yapısını bir ağaç şeklinde yazdıracak bir Bash betiğinden çağırabileceğim herhangi bir linux komutu var mı, örneğin,
folder1
a.txt
b.txt
folder2
folder3
Yanıtlar:
Aradığınız ağaç bu mu? Çoğu dağıtımda olmalıdır (belki isteğe bağlı kurulum olarak).
~> 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
bakımcının web sayfasından alınan örnek.
Sen seçeneğini ekleyebilirsiniz maksimum yineleme derinliğini belirtmek için, bir sayı ile değiştirilir.-L #
#
-d
Ayrıca dosyaları görüntülemek için kaldırın .
-d
dosyaları görüntülemek için de kaldırın !
brew install tree
apt-cyg install tree
Cygwin'e yüklemek için (apt-cyg yüklediğinizi varsayarak)
apt-get install tree
kuracaktır.
Bunu kullanabilirsiniz:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Mevcut alt dizinlerin birkaç saniye içinde dosyasız grafiksel bir temsilini gösterecektir , örneğin /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/"
Hassou'nun çözümünü .bashrc'nize eklemek için şunu deneyin:
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/-/|/'"'"''
Bu komut, klasörleri ve dosyaları görüntülemek için çalışır .
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Örnek çıktı:
.
|-trace.pcap
|-parent
| |-chdir1
| | |-file1.txt
| |-chdir2
| | |-file2.txt
| | |-file3.sh
|-tmp
| |-json-c-0.11-4.el7_0.x86_64.rpm
Kaynak: @javasheriff dan Açıklama burada . Bir yorum olarak batırılmış ve cevap olarak yayınlamak kullanıcıların kolayca fark etmesine yardımcı olur.
find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
iyi çalışıyor buldum
@ Hassou'nun cevabının çıktısını şu şekilde hazırlıyorum:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'
Bu şu tree
anki çıktıya çok benziyor :
.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh
Ayrıca bir takma ad da yapabilirsiniz:
alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''
BTW, tree
MinGW gibi bazı ortamlarda mevcut değildir. Yani alternatif yardımcı olur.
Dizin ağacını yazdırmak için find ve awk komutlarının birleşimini de kullanabilirsiniz. Ayrıntılar için "bakınız nasıl Linux find kullanılarak çok katlı ağaç dizin yapısını yazdırmak ve kombine komutları awk "
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
. Veyafind . -not -path '*/\.*'
ile başlayan dosya ve klasörleri gizlemek için.
. Soruda olduğu gibi boşluklarla çıktı almak istiyorsanız, bu "daha güzel bul" komut dosyası ile kullanın: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]"