Der Befehl tree zeigt den Inhalt eines Verzeichnisses als hübschen ASCII-Baum mit Box-Drawing-Zeichen — ideal, um die Struktur eines Projekts zu dokumentieren, einen Überblick über fremde Codebases zu gewinnen oder schnell zu verstehen, wie ein Backup-Pfad aufgebaut ist. Im Gegensatz zu ls -R liefert tree eine echte hierarchische Darstellung statt flacher Verzeichnislisten.

Was tree macht

tree läuft rekursiv durch ein Verzeichnis und gibt jedes Element mit Box-Drawing-Zeichen eingerückt aus — Verzeichnisse mit └──, ├── und , Dateien als Endpunkte. Das Ergebnis ist eine grafische Übersicht direkt im Terminal, gefolgt von einer Zusammenfassung mit Anzahl Verzeichnisse und Dateien.

Bash Projektüberblick
tree -L 2
Output
.
├── README.md
├── package.json
└── src
    ├── components
    ├── pages
    └── utils

4 directories, 2 files

Die Ausgabe ist deterministisch sortiert (alphabetisch, Verzeichnisse und Dateien gemischt — anders als bei manchen Alternativen) und damit auch gut für Diffs und Doku-Schnipsel geeignet.

Installation

tree ist kein Bestandteil der GNU Coreutils und auf vielen Distributionen nicht vorinstalliert. Vor der ersten Verwendung musst du es eventuell nachinstallieren — der Aufwand ist minimal.

DistributionBefehl
Debian / Ubuntu / Mintsudo apt install tree
Fedora / RHELsudo dnf install tree
Arch / Manjarosudo pacman -S tree
openSUSEsudo zypper install tree
Alpinesudo apk add tree
macOS (Homebrew)brew install tree

Ob tree bereits installiert ist, prüfst du mit command -v tree — gibt es einen Pfad zurück, ist das Werkzeug verfügbar.

Wichtigste Optionen

tree bringt überraschend viele Optionen mit. Die folgende Tabelle deckt die ab, die im Alltag wirklich gebraucht werden.

OptionWirkungTypischer Einsatz
-L NRekursionstiefe auf N Ebenen begrenzenGroßen Bäumen Beine machen
-dNur Verzeichnisse anzeigenStruktur ohne Datei-Lärm
-aVersteckte Einträge einschließenKomplette Sicht inkl. Dotfiles
-I PATTERNPfade per Glob ignorierennode_modules, .git, dist
-P PATTERNNur passende Dateien zeigen*.ts, *.md
--gitignore.gitignore-Regeln respektierenSaubere Projekt-Übersichten
--filelimit NVerzeichnisse mit ≥ N Einträgen überspringenRiesige Caches überspringen
-fVollen Pfad pro EintragSkript-freundlichere Ausgabe
--noreportZusammenfassung am Ende weglassenMarkdown-Einbettung
-J / -XJSON- bzw. XML-AusgabeSkripte und Tools füttern
--charset=asciiReines ASCII statt Unicode-BoxenLogs, alte Terminals, Doku

Praxis-Beispiele

tree glänzt vor allem in zwei Szenarien: Projektübersichten und Doku-Schnipsel.

Bash Projektübersicht mit gitignore-Respekt
tree -L 2 --gitignore

-L 2 begrenzt die Tiefe auf zwei Ebenen, --gitignore blendet alles aus, was die .gitignore ohnehin ignoriert — node_modules, dist, .next, Caches. Das Ergebnis ist eine kompakte, lesbare Übersicht eines Repos, die sich direkt in eine README einfügen lässt.

Bash Reine Verzeichnisstruktur
tree -d -L 3

Mit -d werden Dateien komplett unterdrückt — übrig bleibt das Verzeichnis-Skelett. Praktisch, um die Architektur eines Projekts zu erfassen, ohne von hunderten Source-Files erschlagen zu werden.

Bash Markdown-fertige Ausgabe
tree -L 2 --gitignore --noreport

--noreport lässt die abschließende X directories, Y files-Zeile weg. In einer Markdown-Codefence wirkt die Ausgabe damit deutlich aufgeräumter — und beim Aktualisieren der Doku ändert sich nicht jedes Mal die Zähl-Zeile, was Diffs sauber hält.

Bash Backup-Verzeichnis prüfen
tree -L 3 -d /mnt/backup

Auf Backup-Volumes ist tree -d der schnellste Weg, um zu verifizieren, dass alle erwarteten Top-Level-Pfade vorhanden sind, ohne dass die Ausgabe von tausenden Einzeldateien erschlagen wird.

Alternativen

tree ist nicht die einzige Option für Baumdarstellungen. Hier die wichtigsten Werkzeuge im Vergleich.

ToolHighlightsHinweis
ls -RÜberall verfügbar, keine InstallationFlache Listen pro Ebene, kein echter Baum
find . -printJeden Pfad pro Zeile, perfekt für PipesKeine Visualisierung, nur Listing
eza —treeTree-Modus mit Git-Status, Icons, FarbenAktiv gepflegter ls-Nachfolger
lsd —treeBunter Drop-in-Ersatz, Icons, in RustSchnell, hübsch, einfach zu installieren
exa —treeVorgänger von eza, ähnliche FeaturesWird nicht mehr gepflegt

eza --tree --git-ignore -L 2 ist der direkte Konkurrent zu tree -L 2 --gitignore und punktet mit Git-Status pro Datei. Wer aber Skripte schreibt, die JSON oder XML weiterverarbeiten, bleibt bei tree — die -J/-X-Ausgaben sind eine Killer-Feature, das die Alternativen nicht nachbauen.

Notizen

--gitignore ist Gold für Projektübersichten

In jedem Repo mit node_modules, vendor, target oder ähnlichen Build-Artefakten produziert tree ohne Filter eine unbrauchbare Wand. Mit —gitignore respektiert tree alle Regeln aus .gitignore-Dateien im Baum — das Ergebnis ist exakt die Übersicht, die in eine README gehört. Funktioniert ab tree 2.0.

--charset=ascii für Logs und Markdown ohne Unicode

Die Default-Ausgabe verwendet Unicode-Box-Drawing-Zeichen (, , ). In manchen Logs, in Plain-Text-Mails oder in Markdown-Renderern, die Codefences ohne Monospace zeigen, wirkt das hässlich oder kaputt. —charset=ascii erzwingt reines ASCII (|, +, ) und ist überall sicher.

tree -J liefert JSON für Skripte

Die Option -J gibt den Baum als JSON-Array aus — direkt verwertbar für jq, Python-Skripte oder Web-Frontends. -X liefert dieselbe Struktur als XML, was in CI-Pipelines manchmal handlicher ist. Beide Formate enthalten Typ, Name und (auf Wunsch) Größe und Permissions, sind also wesentlich robuster als das Parsen der ASCII-Ausgabe.

Große Bäume können Sekunden dauern — -L setzen

Auf einem Home-Verzeichnis mit Millionen Dateien läuft tree ohne Tiefenbegrenzung lange und produziert eine Ausgabe, die kein Mensch mehr liest. Default ist immer -L 2 oder -L 3; nur wenn explizit der gesamte Baum gebraucht wird, lässt man die Begrenzung weg. Auf SSDs ist die Wartezeit erträglich, auf HDDs oder Netzwerk-Mounts nicht.

Vorinstalliert? command -v tree

Anders als ls, cd oder find ist tree kein Bestandteil der Coreutils und auf vielen Server-Images, Containern oder minimalen Systemen schlicht nicht vorhanden. Mit command -v tree prüfst du in einer Sekunde, ob das Werkzeug verfügbar ist — schlägt der Befehl fehl, hilft eine schnelle Installation über den Paketmanager.

Weiterführende Ressourcen

Externe Quellen

/ Weiter

Zurück zu Dateisystem

Zur Übersicht