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.
tree -L 2.
├── README.md
├── package.json
└── src
├── components
├── pages
└── utils
4 directories, 2 filesDie 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.
| Distribution | Befehl |
|---|---|
| Debian / Ubuntu / Mint | sudo apt install tree |
| Fedora / RHEL | sudo dnf install tree |
| Arch / Manjaro | sudo pacman -S tree |
| openSUSE | sudo zypper install tree |
| Alpine | sudo 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.
| Option | Wirkung | Typischer Einsatz |
|---|---|---|
-L N | Rekursionstiefe auf N Ebenen begrenzen | Großen Bäumen Beine machen |
-d | Nur Verzeichnisse anzeigen | Struktur ohne Datei-Lärm |
-a | Versteckte Einträge einschließen | Komplette Sicht inkl. Dotfiles |
-I PATTERN | Pfade per Glob ignorieren | node_modules, .git, dist |
-P PATTERN | Nur passende Dateien zeigen | *.ts, *.md |
--gitignore | .gitignore-Regeln respektieren | Saubere Projekt-Übersichten |
--filelimit N | Verzeichnisse mit ≥ N Einträgen überspringen | Riesige Caches überspringen |
-f | Vollen Pfad pro Eintrag | Skript-freundlichere Ausgabe |
--noreport | Zusammenfassung am Ende weglassen | Markdown-Einbettung |
-J / -X | JSON- bzw. XML-Ausgabe | Skripte und Tools füttern |
--charset=ascii | Reines ASCII statt Unicode-Boxen | Logs, alte Terminals, Doku |
Praxis-Beispiele
tree glänzt vor allem in zwei Szenarien: Projektübersichten und Doku-Schnipsel.
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.
tree -d -L 3Mit -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.
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.
tree -L 3 -d /mnt/backupAuf 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.
| Tool | Highlights | Hinweis |
|---|---|---|
| ls -R | Überall verfügbar, keine Installation | Flache Listen pro Ebene, kein echter Baum |
| find . -print | Jeden Pfad pro Zeile, perfekt für Pipes | Keine Visualisierung, nur Listing |
| eza —tree | Tree-Modus mit Git-Status, Icons, Farben | Aktiv gepflegter ls-Nachfolger |
| lsd —tree | Bunter Drop-in-Ersatz, Icons, in Rust | Schnell, hübsch, einfach zu installieren |
| exa —tree | Vorgänger von eza, ähnliche Features | Wird 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
- tree(1) – Manpage (Linux Die) — Vollständige Optionsreferenz
- tree – Original-Projektseite — Steve Bakers ursprüngliche Heimat des Tools
- Arch Wiki: tree — Hinweise im Kontext der Arch-Coreutils
- eza – modernes ls mit Tree-Modus — Aktive Alternative mit Git-Integration
- lsd – LSDeluxe — Bunter Drop-in-Ersatz mit Tree-Modus
Verwandte Artikel
- ls – Dateien auflisten — Klassischer Listing-Befehl als flache Alternative
- find – Dateien suchen — Pfade rekursiv ausgeben für Skripte
- du – Speicherverbrauch ermitteln — Mit Tree-ähnlicher Ausgabe via
--max-depth - Globbing in der Shell — Patterns für
-Iund-Pverstehen - Linux Dateisystem — Hintergrund zur Verzeichnisstruktur