2010-08-11 17 views
329

Esiste un comando di Linux che posso chiamare da uno script Bash che stamperà la struttura della directory sotto forma di un albero, ad esempio,comando Linux per struttura di directory di stampa sotto forma di un albero

folder1 
    a.txt 
    b.txt 
folder2 
    folder3 
+7

solo correre 'find'. O trovare. -not -path '*/\. *' 'per nascondere file e cartelle che iniziano con' .'. Se vuoi avere output con spazi, come nella domanda, usalo con questo script "find prettifier": 'find. -not -path '*/\. *' | python -c "importa sys as s; sa = []; [setattr (s, 'a', lista (filtro (lambda p: c.startswith (p + '/'), sa))) o (s.stdout. scrivi ('' * len (sa) + c [len (sa [-1]) + 1 se sa else 0:]) o True) e saappend (c [: - 1]) per c in s.stdin] "' – user

+5

Queste domande non dovrebbero essere migrate su SuperUser anziché chiuse? – Balmipour

+1

@Balmipour: forse dovrebbero. Ma "Solo le domande che hanno meno di 60 giorni possono essere migrate" ([Cos'è la migrazione e come funziona?] (Http://meta.stackexchange.com/a/10250/248863)). Non chiedermi il perché. – user

risposta

550

è questo quello che cercate tree, dovrebbe essere in 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 

esempio prelevato dalla pagina Web del manutentore.

È possibile aggiungere l'opzione -L # dove # è sostituito da un numero, per specificare il livello di ricorsività massimo.

Rimuovere -d per visualizzare anche i file.

+42

Nota per tutti i visitatori che vedono questo: rimuovere '-d' anche per visualizzare i file! – default

+10

Utilizzando Ubuntu v12.04, questo non era preinstallato. – gbmhunter

+2

Non installato in CentOS 6, ma un veloce 'yum install tree' lo ha ottenuto. – Adam

199

È possibile utilizzare questo:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/' 

mostra una rappresentazione grafica degli attuali sub-directory, per esempio in /var/cache/:

. 
    |-apache2 
    |---mod_cache_disk 
    |-apparmor 
    |-apt 
    |---archives 
    |-----partial 
    |-apt-xapian-index 
    |---index.1 
    |-dbconfig-common 
    |---backups 
    |-debconf 

Source

+5

Se lo vuoi con spazi, più come l'OP richiesto, allora questo: 'ls -R | grep ": $" | sed -e 's /: $ //' -e 's/[^ -] [^ \ /] * \ ///g' -e 's/^//' ' – Ben

+0

in qualsiasi modo posso farlo ignorare dotfile? Per esempio. impedirgli di elencare il contenuto di '.git'? – GMA

+0

@GeorgeMillo vedere [il mio commento] (http://stackoverflow.com/questions/3455625/linux-command-to-print-directory-structure-in-the-form-of-a-tree#comment37392136_3455625) – user

9

Per aggiungere la soluzione di Hassou al vostro .bashrc, provare:

alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e 
      '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'" 
+5

Attenzione al carattere di fine riga alla fine della prima riga se si copia direttamente questo – Rahul

Problemi correlati