Esiste un comando linux che posso chiamare da uno script Bash che stamperà la struttura della directory sotto forma di un albero, ad esempio,
folder1
a.txt
b.txt
folder2
folder3
Esiste un comando linux che posso chiamare da uno script Bash che stamperà la struttura della directory sotto forma di un albero, ad esempio,
folder1
a.txt
b.txt
folder2
folder3
Risposte:
È questo quello che stai cercando albero ? Dovrebbe essere nella maggior parte delle distribuzioni (forse come installazione opzionale).
~> 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
campione tratto dalla pagina Web del manutentore.
È possibile aggiungere l'opzione in -L #
cui #
è sostituito da un numero, per specificare la profondità massima di ricorsione.
Rimuovi -d
per visualizzare anche i file.
-d
per visualizzare i file!
brew install tree
apt-cyg install tree
(supponendo che tu abbia installato apt-cyg)
apt-get install tree
lo installerà.
Puoi usare questo:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Mostrerà in pochi secondi una rappresentazione grafica delle sottodirectory correnti senza file , ad es. 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/"
Per aggiungere la soluzione Hassou al tuo .bashrc, prova:
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/-/|/'"'"''
Questo comando funziona per visualizzare sia le cartelle che i file .
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Esempio di output:
.
|-trace.pcap
|-parent
| |-chdir1
| | |-file1.txt
| |-chdir2
| | |-file2.txt
| | |-file3.sh
|-tmp
| |-json-c-0.11-4.el7_0.x86_64.rpm
Fonte: commento da @javasheriff qui . È sommerso come un commento e pubblicandolo come risposta aiuta gli utenti a individuarlo facilmente.
find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
funziona bene
Sto preparando l'output della risposta di @ Hassou con:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'
Questo è molto simile all'output di tree
now:
.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh
Puoi anche crearne uno alias:
alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''
A proposito, tree
non è disponibile in alcuni ambienti, come MinGW. Quindi l'alternativa è utile.
È inoltre possibile utilizzare la combinazione dei comandi find e awk per stampare l'albero delle directory. Per i dettagli, fare riferimento a " Come stampare una struttura di directory ad albero multilivello usando i comandi combinati linux find e 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
. Ofind . -not -path '*/\.*'
per nascondere file e cartelle che iniziano con.
. Se vuoi avere un output con spazi, come nella domanda, usalo con questo script "trova prettifier":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]"