Comando tree in Linux: directory, filtri e salvataggio in JSON
Il comando tree mostra file e directory in una struttura ad albero. Con -L limiti la profondità, con -d visualizzi solo le directory e con -I escludi i nomi che non ti interessano.
Questa guida riguarda il programma tree per Unix/Linux, con esempi di installazione, filtri, metadati e salvataggio in testo, JSON e XML. Il comando omonimo di Windows ha sintassi e opzioni diverse. Le opzioni disponibili dipendono dalla versione: controlla tree --version e tree --help sul sistema che usi.
Cos'è il comando tree?
tree visita ricorsivamente la directory indicata e rappresenta i rapporti tra file e sottodirectory con rientri e linee. Senza un percorso parte dalla directory corrente, .. Per un esempio completo, scegli una posizione scrivibile in cui tree-demo non esista ancora: i comandi seguenti creano tre sottodirectory e cinque file vuoti di prova, poi visualizzano la struttura.
mkdir tree-demo &&
cd ./tree-demo &&
mkdir config public src &&
touch README.md config/app.conf public/index.html src/main.py src/utils.py &&
LC_ALL=C tree -n --charset=UTF-8
L’output atteso per questa cartella di prova è il seguente. LC_ALL=C rende prevedibile l’ordinamento dei nomi, -n disattiva i colori e --charset=UTF-8 sceglie i caratteri delle linee. I file vuoti servono soltanto a mostrare la gerarchia, non costituiscono un’applicazione eseguibile.
.
├── README.md
├── config
│ └── app.conf
├── public
│ └── index.html
└── src
├── main.py
└── utils.py
3 directories, 5 files
ls è adatto a esaminare gli elementi di una directory; tree rende più immediati i rapporti tra più livelli. Dopo l’esempio ti trovi dentro tree-demo: puoi provare lì le opzioni che non specificano un percorso. Gli altri percorsi riportati nella guida sono esempi e devono esistere sul tuo sistema.
Installazione di tree
tree non è un comando integrato nella shell e potrebbe non essere installato di default a seconda della distribuzione. Per prima cosa, verifica se è installato con il seguente comando.
tree --version
Debian e Ubuntu
sudo apt update
sudo apt install tree
Rocky Linux, AlmaLinux, RHEL e Fedora
sudo dnf install tree
Usa il comando del gestore pacchetti della tua distribuzione; non occorre eseguire tutte le procedure. Dove è ancora previsto yum, l’equivalente è sudo yum install tree. L’installazione richiede i privilegi appropriati e un repository abilitato che fornisca il pacchetto.
Arch Linux
sudo pacman -S tree
Sintassi di base e utilizzo
tree [options] [directory...]
Senza argomenti viene mostrata la directory corrente. Puoi indicare una o più directory, come nelle righe seguenti, che sono esempi indipendenti. I percorsi con ~ partono dalla home; quelli relativi partono dalla posizione corrente.
tree
tree /etc/nginx
tree ~/projects/app
tree src tests
I percorsi con spazi devono essere racchiusi tra virgolette in modo che vengano passati come un unico argomento.
tree "Project Files"
Normalmente il riepilogo finale indica quante directory e quanti file sono stati elencati. --noreport lo omette. Con filtri o limiti non usarlo come inventario completo del disco; il manuale segnala inoltre possibili imprecisioni nei conteggi con -I, -P e --filelimit.
tree --noreport
Scegliere il percorso e la profondità
Visualizza la struttura di una directory specifica
Puoi specificare la directory da controllare come argomento senza cambiare la posizione attuale.
tree /var/www
tree ./src
Indicando il percorso puoi controllare un’altra posizione senza cambiare la directory di lavoro della shell. Usa le virgolette se il percorso contiene spazi.
Limita la profondità massima con -L
Per progetti grandi o directory di sistema, visualizzare tutto può risultare in un output eccessivamente lungo. Specifica la profondità massima da visualizzare dopo -L.
tree -L 1
tree -L 2 /var/www
tree -L 3 ~/projects/app
tree -L 2 mostra al massimo due livelli sotto il punto di partenza. Nella cartella di prova, -L 1 mostra README.md, config, public e src; con -L 2 compaiono anche i file contenuti nelle tre directory. La radice visualizzata non conta come primo livello.
Includere i file nascosti o mostrare solo le directory
Includi i file nascosti con -a
Di norma i nomi che iniziano con un punto sono esclusi. -a include file e directory nascosti, come .env o .gitignore, ma non le voci speciali . e ... La cartella di prova iniziale non contiene nomi nascosti, quindi su quella struttura -a non aggiunge elementi.
tree -a
tree -a -L 2
Quando si condividono i nomi dei file di configurazione o le strutture delle directory all'esterno, assicurarsi che non vengano esposte informazioni sensibili. -a mostra i nomi, non i contenuti, ma i nomi stessi possono essere sensibili.
Mostra solo le directory con -d
Per controllare solo la struttura delle cartelle escludendo i file, usare -d.
tree -d
tree -d -L 3 /var/www
Nell’esempio iniziale tree -d mostra solo config, public e src sotto la radice. Questa vista è utile per descrivere l’organizzazione dei moduli o delle cartelle di backup.
Includere o escludere per nome file
I pattern di -P e -I sono espressioni con caratteri jolly: per esempio *.py indica nomi che terminano con .py. Racchiudili tra apici singoli affinché sia tree, e non la shell, a interpretarli. Il carattere | separa pattern alternativi.
Mostra solo i file corrispondenti con -P
-P seleziona i file che corrispondono al pattern. Le directory possono rimanere visibili per conservare il contesto; l’opzione non equivale a filtrare ogni nome di directory con la stessa regola.
tree -P '*.py'
tree -P '*.jpg|*.png|*.webp'
Aggiungi --prune per eliminare dall’output le directory che rimangono vuote dopo il filtro. Nella cartella di prova la combinazione seguente mantiene il ramo src con main.py e utils.py, escludendo gli altri rami.
tree -P '*.py' --prune
Per includere file nascosti nel controllo del modello, è necessario inoltre -a.
Escludere elementi non necessari con -I
-I omette dall’output i file e le directory che corrispondono al pattern. Escludere dipendenze, risultati di compilazione e cache rende più leggibile la struttura di un progetto.
tree -I 'node_modules|.git|dist|__pycache__'
tree -L 3 -I '*.log|tmp|cache'
-I esclude i file solo dalla visualizzazione, senza eliminarli.
Applicare le regole Git con --gitignore
Nelle versioni che la supportano, --gitignore applica le regole dei file .gitignore. Può cercare tali file anche nelle directory superiori al punto di partenza e utilizzare .git/info/exclude o il file indicato tramite GIT_DIR. Il risultato dipende quindi anche dalle regole presenti fuori dalla directory visualizzata.
tree --gitignore
tree -a --gitignore -L 3
Controlla in tree --help che l’opzione sia disponibile. Le regole Git non sostituiscono la revisione dell’output prima di condividerlo: un nome non ignorato può comunque essere riservato.
Dimensioni, permessi e data di modifica
Dimensioni dei file e totali delle directory
-s mostra le dimensioni in byte; -h le mostra direttamente in unità leggibili, senza richiedere -s. I suffissi K, M e G di -h usano potenze di 1024; --si usa invece potenze di 1000.
tree -s
tree -h
--du accumula per ogni directory le dimensioni dei file e delle sottodirectory e implica -s. Puoi combinarlo con -h. Questi valori non vanno confusi con una misura precisa dei blocchi effettivamente allocati sul disco: file sparsi, collegamenti e criteri di esplorazione possono rendere diverso il risultato di strumenti dedicati all’uso del disco.
tree --du -h -L 2
La combinazione con -L 2 mantiene compatta la vista. Non dedurre da una vista filtrata o limitata che ogni elemento del disco sia stato considerato: verifica la versione e il perimetro della scansione prima di usare i totali per decisioni di spazio. Il calcolo con --du raccoglie l’albero prima di stamparlo e può aumentare sensibilmente tempi e memoria.
Permessi, proprietario e date
-p mostra tipo e permessi, -u il proprietario e -g il gruppo. -D aggiunge la data dell’ultima modifica del contenuto; se usi anche -c, la data mostrata riguarda invece l’ultima variazione dello stato del file, non la sua creazione.
tree -p
tree -pug
tree -pugD -L 2
Quando si indagano problemi di permessi, è possibile vedere sia la struttura che i metadati, ma se ci sono nomi utente e percorsi molto lunghi, la larghezza dell'output potrebbe diventare ampia.
Ordinamento e formato dei percorsi
Mostra e ordina prima le directory
--dirsfirst posiziona le directory prima dei file. -t ordina per data di modifica, --sort=size ordina per dimensione e -r inverte l'ordine dei risultati.
tree --dirsfirst
tree -t
tree --sort=size -r
-U disattiva l’ordinamento e usa l’ordine fornito dalla directory del file system, che non va interpretato come ordine cronologico. Disattiva anche --dirsfirst e l’inversione con -r.
Ottenere elenchi di percorsi senza linee
-f antepone il percorso di partenza al nome di ciascun elemento; -i elimina le linee e i rientri dell’albero. Il prefisso non è necessariamente un percorso assoluto: con tree -f ./src rimane basato su ./src. Usa un punto di partenza assoluto se ti servono percorsi assoluti.
tree -f
tree -fi --noreport
-fi --noreport è utile per un elenco da leggere, ma non costituisce un formato universale per passare nomi di file ad altri comandi: caratteri speciali, escape e indicazioni dei collegamenti simbolici richiedono attenzione. Per elaborare strutture complesse preferisci JSON o XML e un parser adatto.
Salvare i risultati in un file e in formato strutturato
Salva come file di testo
-o salva l’output in un file. Per provare gli esempi seguenti, dalla cartella tree-demo torna prima alla sua directory padre con cd ... I file di risultato sono così esterni all’albero osservato e non possono comparire nella sua struttura. Scegli nomi che non esistano ancora: -o e la redirezione > possono sovrascrivere un file esistente.
tree -n -L 3 ./tree-demo -o tree-demo-structure.txt
tree -a -I '.git|node_modules' --noreport ./tree-demo -o tree-demo-filtered.txt
In alternativa usa la redirezione della shell. -n disattiva i colori; se passi esplicitamente anche -C, quest’ultima opzione li forza nuovamente. Il file seguente ha un nome distinto da quelli degli esempi precedenti.
tree -n -L 3 ./tree-demo > tree-demo-redirect.txt
Output in JSON e XML
-J produce una struttura JSON, mentre -X produce XML. Questi esempi partono ancora dalla directory padre di tree-demo e salvano i risultati all’esterno della cartella esaminata.
tree -J -L 3 ./tree-demo > tree-demo-structure.json
tree -X -L 3 ./tree-demo > tree-demo-structure.xml
Apri il file generato con un parser JSON o XML e verifica radice, nomi e livelli prima di integrarlo in un programma. Formato e campi possono cambiare con la versione. --noreport omette il riepilogo dei conteggi anche dagli output strutturati: usalo se vuoi ricevere soltanto la gerarchia.
Collegamenti simbolici e confini del file system
Decidere se seguire i link simbolici
Per impostazione predefinita, i collegamenti simbolici mostrano il nome del collegamento e il percorso di destinazione, ma non entrano nelle directory a cui puntano. L'uso di -l segue i collegamenti simbolici che puntano alle directory.
tree -l -L 3
Seguire i collegamenti può estendere la scansione oltre il ramo che ti aspettavi di visitare. Associa -l a un limite di profondità; tree evita i collegamenti ricorsivi che riesce a rilevare, ma controlla comunque l’ampiezza e la durata dell’esplorazione.
Rimani sul filesystem corrente con -x
-x impedisce di spostarsi in un filesystem diverso dalla directory iniziale. È utile per limitare l'intervallo di esplorazione su server con molti punti di mount.
tree -x -L 3 /
Anche quando si punta alla directory principale, i percorsi senza autorizzazione non possono essere letti e stampare la struttura dell'intero sistema può produrre risultati molto grandi.
Combinazioni di comandi tree usate frequentemente
| Comando | Scopo |
|---|---|
tree |
Visualizza i file e le sottodirectory della directory corrente come un albero. |
tree -L 2 |
Visualizza solo fino a due livelli dalla posizione corrente. |
tree -a |
Include anche file e directory nascosti. |
tree -d |
Visualizza solo le directory, escludendo i file. |
tree -I 'node_modules|.git' |
Esclude file e directory che corrispondono al modello specificato. |
tree -P '*.py' --prune |
Mostra i rami che contengono file Python. |
tree -h --du -L 2 |
Mostra la dimensione cumulativa delle directory fino a due livelli in un formato leggibile. |
tree -pugD |
Mostra permessi, utente, gruppo e ora di modifica insieme. |
tree -fi --noreport |
Elenca percorsi con il prefisso di partenza, senza linee dell’albero né riepilogo. |
tree -J -L 3 |
Visualizza la struttura fino a tre livelli come JSON. |
Riepilogo delle principali opzioni
| Opzione | Descrizione |
|---|---|
-a |
Includi file e directory nascosti che iniziano con un punto. |
-d |
Visualizza solo le directory. |
-L number |
Limita la profondità massima delle directory da visualizzare. |
-P pattern |
Seleziona i file che corrispondono al modello wildcard. |
-I pattern |
Esclude file e directory che corrispondono al modello wildcard. |
--prune |
Rimuove le directory vuote dall'output dopo l'applicazione dei filtri. |
--gitignore |
Utilizza le regole di esclusione dei file di Git per il filtraggio. |
-f |
Antepone a ogni nome il percorso di partenza; il risultato può essere relativo. |
-h |
Mostra le dimensioni dei file in unità leggibili. |
--du |
Calcola le dimensioni cumulative per directory. |
-p |
Visualizza tipi di file e permessi. |
-D |
Mostra l'ultima data di modifica. |
--dirsfirst |
Ordina le directory prima dei file. |
-J |
Restituisce in formato JSON. |
-X |
Restituisce in formato XML. |
-o FILE |
Salva l'output nel file specificato. |
-l |
Segui i collegamenti simbolici che puntano a directory. |
-x |
Cerca solo all'interno dello stesso filesystem della posizione iniziale. |
--noreport |
Ometti il riepilogo del numero di file e directory alla fine. |
Precauzioni per directory di grandi dimensioni
Limita prima la profondità e i filtri
Per alberi grandi parti da una directory mirata, limita la profondità con -L ed escludi i rami non pertinenti con -I o --gitignore. Aumenta gradualmente il perimetro solo se l’output iniziale è insufficiente.
Comprendere il costo di --du e --prune
--du e --prune potrebbero dover raccogliere l'intero albero in memoria prima di produrre risultati. In directory molto grandi, l'output potrebbe essere ritardato e l'uso della memoria potrebbe aumentare.
Controllare errori di permesso e nomi sensibili
Le directory per le quali l'utente corrente non ha permessi di lettura o di navigazione non saranno visualizzate completamente. Eseguire semplicemente come amministratore per vedere l'intera struttura può espandere l'accesso inutilmente, quindi controlla prima i percorsi e i permessi necessari.
Prima di allegare il risultato a una documentazione o a una segnalazione, cerca nomi utente, percorsi interni, nomi di file riservati e nomi in codice del progetto. Le opzioni di esclusione modificano la visualizzazione, senza cancellare i file originali.
FAQ
tree: comando non trovato - perché si verifica questo errore?
Questo accade perché tree non è installato oppure il percorso eseguibile non è in PATH. Installa il pacchetto tree utilizzando il gestore pacchetti della tua distribuzione e verifica con tree --version.
Come posso visualizzare le sottodirectory fino a solo due livelli?
Usa tree -L 2. Per controllare un percorso diverso, specifica la directory alla fine come tree -L 2 /path/to/check.
Posso escludere contemporaneamente le directory node_modules e .git?
Usa tree -I 'node_modules|.git'. Racchiudere il modello tra virgolette singole impedisce alla shell di interpretare prima la barra verticale o i caratteri jolly.
Come posso formattare bene l'output dell'albero per un README?
Limita la profondità e le esclusioni come tree -L 3 -I '.git|node_modules|dist' --noreport. Dopo esserti assicurato che l'output non contenga percorsi interni o nomi di file sensibili, puoi inserirlo in un blocco di codice per preservare la struttura.




