Linux / Befehl tree: Verzeichnisstruktur anzeigen

`tree` ist ein Befehl, der die hierarchische Struktur von Verzeichnissen und Dateien in einem eingerückten Baumformat anzeigt. Er ist nützlich, um das gesamte aktuelle Verzeichnis zu durchsuchen oder die Ausgabetiefe zu begrenzen und bestimmte Dateien auszuwählen, um die Projektstruktur zu überprüfen.

Dies erklärt häufig verwendete Methoden, von der grundlegenden Installation bis zum Anzeigen versteckter Dateien, Ausschlussmuster, Überprüfung der Dateigröße und -berechtigungen sowie dem Speichern von Text oder JSON. Die Beispiele basieren auf dem `tree` für Unix/Linux.

Ergänzende Befehle und Anwendungsfälle finden Sie in Liste der häufig verwendeten Befehle in Linux.

Was ist der tree-Befehl?

`tree durchsucht rekursiv das angegebene Verzeichnis und druckt die Beziehung zwischen Dateien und Unterverzeichnissen eingerückt nach Tiefe. Wenn kein Verzeichnis angegeben ist, wird das aktuelle Verzeichnis .` angesprochen.

tree

Zum Beispiel können Sie die folgende Struktur auf einen Blick sehen.

.
├── README.md
├── config
│   └── app.conf
├── public
│   └── index.html
└── src
    ├── main.py
    └── utils.py

3 directories, 5 files

Während `ls ebenfalls eine Dateiliste anzeigt, ist es im Grunde genommen geeignet, um Elemente in einem einzelnen Verzeichnis zu überprüfen. tree` ist bequemer, um mehrere Ebenen von Einschlüssen visuell zu verstehen.

Installation des tree

`tree` ist kein Shell-Builtin-Befehl und ist je nach Distribution möglicherweise nicht standardmäßig installiert. Überprüfen Sie zunächst, ob er mit dem folgenden Befehl installiert ist.

tree --version

Debian und Ubuntu

sudo apt update
sudo apt install tree

Rocky Linux, AlmaLinux, RHEL und Fedora

sudo dnf install tree

Auf älteren Distributionen, die yum anstelle von dnf verwenden, können Sie sudo yum install tree verwenden. Das Paket muss in einem aktivierten Repository verfügbar sein, um installiert zu werden.

Arch Linux

sudo pacman -S tree

Grundlegende Syntax und Verwendung

tree [options] [directory...]

Um das aktuelle Verzeichnis auszugeben, führen Sie es ohne Argumente aus, und um einen anderen Ort zu überprüfen, geben Sie den Pfad an. Sie können auch mehrere Verzeichnisse gleichzeitig angeben.

tree
tree /etc/nginx
tree ~/projects/app
tree src tests

Pfadnamen mit Leerzeichen sollten in Anführungszeichen gesetzt werden, damit sie als ein einziges Argument übergeben werden.

tree "Project Files"

Standardmäßig endet die Ausgabe mit der Anzahl der untersuchten Verzeichnisse und Dateien. Wenn Sie diese Zusammenfassung nicht benötigen, verwenden Sie --noreport.

tree --noreport

Geben Sie das Zielverzeichnis und die Ausgabetiefe an

Eine bestimmte Verzeichnisstruktur anzeigen

Sie können das zu überprüfende Verzeichnis als Argument angeben, ohne den aktuellen Ort zu ändern.

tree /var/www
tree ./src

Die Angabe des Pfads trennt den Ausführungsort des Befehls und das Ziel der Ausgabe, wodurch die Absicht auch bei der Automatisierung leichter verständlich wird.

Begrenzen Sie die maximale Tiefe mit -L

Bei großen Projekten oder Systemverzeichnissen kann das Ausgeben aller Inhalte zu einer übermäßig langen Ausgabe führen. Geben Sie nach -L die maximale Tiefe an, die angezeigt werden soll.

tree -L 1
tree -L 2 /var/www
tree -L 3 ~/projects/app

tree -L 2 zeigt nur bis zu zwei Ebenen ab dem Startpunkt an. Beim Teilen von Verzeichnisstrukturen ist es besser, die Tiefe zuerst zu begrenzen, damit nur der notwendige Bereich sichtbar ist.

Versteckte Einträge und reine Verzeichnislisten

Versteckte Dateien mit -a einbeziehen

Standardmäßig werden versteckte Dateien und Verzeichnisse, deren Namen mit einem Punkt beginnen, nicht in der Ausgabe angezeigt. Mit -a werden auch Elemente wie .env und .gitignore angezeigt.

tree -a
tree -a -L 2

Beim externen Teilen von Konfigurationsdateinamen oder Verzeichnisstrukturen stellen Sie sicher, dass keine sensiblen Informationen offengelegt werden. -a gibt die Namen aus, nicht die Inhalte, aber die Namen selbst können sensibel sein.

Nur Verzeichnisse mit -d anzeigen

Um nur die Ordnerstruktur ohne Dateien zu überprüfen, verwenden Sie -d.

tree -d
tree -d -L 3 /var/www

Es ist nützlich, um schnell die Modulzusammensetzung eines Projekts oder die Struktur von Backup-Verzeichnissen zu erklären.

Nach Dateinamen ein- oder ausschließen

Es ist sicher, die Muster -P und -I in einfache Anführungszeichen zu setzen, damit die Shell sie nicht vorher erweitert. Mehrere Muster können durch den senkrechten Strich | getrennt werden.

Nur Dateien anzeigen, die mit -P übereinstimmen

-P wählt nur Dateien aus, die dem Wildcard-Muster entsprechen.

tree -P '*.py'
tree -P '*.jpg|*.png|*.webp'

Um auch Verzeichnisse zu entfernen, die nach dem Filtern leer erscheinen, verwenden Sie --prune zusammen.

tree -P '*.py' --prune

Um versteckte Dateien in der Musterprüfung einzubeziehen, benötigen Sie zusätzlich -a.

Unerwünschte Elemente mit -I ausschließen

-I schließt Dateien und Verzeichnisse, die dem Muster entsprechen, aus der Ausgabe aus. Das Ausblenden von Abhängigkeiten, Build-Ergebnissen und Cache-Verzeichnissen macht die Projektstruktur viel einfacher.

tree -I 'node_modules|.git|dist|__pycache__'
tree -L 3 -I '*.log|tmp|cache'

-I schließt Dateien nur aus der Anzeige aus, ohne sie zu löschen.

Verwendung von Git-Ignore-Regeln mit --gitignore

In unterstützten Versionen ermöglicht --gitignore, die Regeln von .gitignore und Git-Ausschlussdateien im Filter zu verwenden.

tree --gitignore
tree -a --gitignore -L 3

Überprüfen Sie, ob Ihre installierte Version diese Option mit tree --help unterstützt. Selbst wenn Sie --gitignore verwenden, sollten Sie die Ausgabe manuell prüfen, bevor Sie die Repository-Struktur extern weitergeben.

Größe, Berechtigungen und Änderungszeit anzeigen

Anzeige der Dateigröße und der kumulativen Verzeichnisgröße

-s zeigt die Größe in Bytes an, und wenn Sie -h zusammen verwenden, wird die Größe in einem menschenlesbaren Format angezeigt.

tree -s
tree -h

--du berechnet die kumulative Größe von Dateien und Unterverzeichnissen, die in jedem Verzeichnis enthalten sind. Wenn Sie ein menschenlesbares Format wünschen, verwenden Sie -h zusammen.

tree --du -h -L 2

--du liest den gesamten Baum, berechnet die Größe und gibt sie dann aus, sodass es bei großen Verzeichnissen lange dauern und viel Speicher verwenden kann.

Anzeige von Berechtigungen, Eigentümer und Zeit

-p zeigt Berechtigungen an, -u zeigt den Eigentümer an, und -g zeigt die Gruppe an. Das Hinzufügen von -D ermöglicht es Ihnen außerdem, die letzte Änderungszeit zu sehen.

tree -p
tree -pug
tree -pugD -L 2

Bei der Untersuchung von Berechtigungsproblemen können Sie sowohl die Struktur als auch die Metadaten sehen, aber wenn es sehr lange Benutzernamen und Pfade gibt, kann die Ausgabebreite sehr groß werden.

Sortierreihenfolge und Pfadanzeige ändern

Verzeichnisse zuerst anzeigen und sortieren

--dirsfirst platziert Verzeichnisse vor Dateien. -t sortiert nach Änderungszeit, --sort=size sortiert nach Größe, und -r kehrt die Ergebnisreihenfolge um.

tree --dirsfirst
tree -t
tree --sort=size -r

Um die im Dateisystem gespeicherte Reihenfolge unverändert zu verwenden und die Sortierkosten zu reduzieren, können Sie -U verwenden. In diesem Fall ist --dirsfirst deaktiviert.

Erstellen Sie vollständige Pfade und übersichtliche Listen

-f zeigt das vollständige Pfadpräfix vor jedem Element an. -i entfernt die astförmigen Einrückungslinien.

tree -f
tree -fi --noreport

Wenn Sie eine einfache Pfadliste für die Verwendung in anderen Befehlen benötigen, ist die Kombination -fi --noreport praktisch. Wenn jedoch Dateinamen Sonderzeichen wie Zeilenumbrüche enthalten, ist einfaches Textparsen möglicherweise nicht sicher.

Speichern Sie Ergebnisse in einer Datei und in einem strukturierten Format

Als Textdatei speichern

-o sendet die Ausgabenergebnisse an die angegebene Datei.

tree -L 3 -o directory-structure.txt
tree -a -I '.git|node_modules' --noreport -o project-tree.txt

Sie können auch Shell-Umleitungen verwenden. Sie können Farben mit -n ausschalten, um zu verhindern, dass Farbsteuerzeichen in die Datei gemischt werden.

tree -n -L 3 > directory-structure.txt

Ausgabe in JSON und XML

-J gibt im JSON-Format aus, und -X gibt im XML-Format aus. Es kann verwendet werden, wenn die Struktur in nachfolgenden Programmen analysiert oder transformiert wird.

tree -J -L 3 > directory-structure.json
tree -X -L 3 > directory-structure.xml

Das strukturierte Ausgabeformat und die bereitgestellten Felder können je nach installierter tree-Version variieren, daher sollten Sie die tatsächliche Ausgabe zuerst überprüfen, wenn Sie ein weiterverarbeitendes Programm erstellen.

Umgang mit symbolischen Links und Dateisystemgrenzen

Entscheiden, ob symbolischen Links gefolgt werden soll

Standardmäßig zeigen symbolische Links den Linknamen und den Zielpfad an, betreten jedoch nicht die Verzeichnisse, auf die sie verweisen. Die Verwendung von -l folgt symbolischen Links, die auf Verzeichnisse zeigen.

tree -l -L 3

Das Folgen von Links kann dazu führen, dass mehr Pfade erkundet werden als erwartet, daher ist es sicherer, gleichzeitig eine Tiefenbegrenzung zu verwenden. Das Tool vermeidet erkannte rekursive Links, aber Sie müssen selbst den Ausgabebereich und die Verarbeitungszeit überprüfen.

Mit -x auf dem aktuellen Dateisystem bleiben

-x verhindert das Wechseln in ein anderes Dateisystem als das Startverzeichnis. Es ist nützlich, um den Erkundungsbereich auf Servern mit vielen Einhängepunkten zu begrenzen.

tree -x -L 3 /

Selbst beim Anvisieren des Stammverzeichnisses können Pfade ohne Berechtigung nicht gelesen werden, und das Drucken der Struktur des gesamten Systems kann sehr große Ergebnisse erzeugen.

Häufig verwendete Tree-Befehls-Kombinationen

Befehl Zweck
tree Zeigt die Dateien und Unterverzeichnisse des aktuellen Verzeichnisses als Baum an.
tree -L 2 Zeigt nur bis zu zwei Ebenen ab dem aktuellen Standort an.
tree -a Beinhaltet auch versteckte Dateien und versteckte Verzeichnisse.
tree -d Zeigt nur Verzeichnisse an, schließt Dateien aus.
tree -I 'node_modules|.git' Schließt Dateien und Verzeichnisse aus, die dem angegebenen Muster entsprechen.
tree -P '*.py' --prune Zeigt zentriert um Äste, die Python-Dateien enthalten.
tree -h --du -L 2 Zeigt die kumulative Größe von Verzeichnissen bis zu zwei Ebenen in einem lesbaren Format an.
tree -pugD Zeigt Berechtigungen, Benutzer, Gruppe und Änderungszeit zusammen an.
tree -fi --noreport Erzeugt eine vollständige Pfadliste ohne Verzweigungslinien und Zusammenfassung.
tree -J -L 3 Gibt die Struktur bis zu drei Ebenen als JSON aus.

Zusammenfassung der wichtigsten Optionen

Option Beschreibung
-a Beinhaltet versteckte Dateien und Verzeichnisse, die mit einem Punkt beginnen.
-d Zeigt nur Verzeichnisse an.
-L number Begrenzt die maximale Verzeichnistiefe zur Anzeige.
-P pattern Wählt Dateien aus, die dem Platzhaltermuster entsprechen.
-I pattern Schließt Dateien und Verzeichnisse aus, die dem Platzhaltermuster entsprechen.
--prune Entfernt leere Verzeichnisse aus der Ausgabe nach der Anwendung von Filtern.
--gitignore Verwendet Git-ausgeschlossene Datei-Regeln für die Filterung.
-f Zeigt das vollständige Pfadpräfix vor jedem Dateinamen an.
-h Zeigt Dateigrößen in menschenlesbaren Einheiten an.
--du Berechnet kumulative Größen nach Verzeichnis.
-p Zeigt Dateitypen und Berechtigungen an.
-D Zeigt die letzte Änderungszeit an.
--dirsfirst Sortiert Verzeichnisse vor Dateien.
-J Gibt im JSON-Format aus.
-X Ausgabe im XML-Format.
-o FILE Speichert die Ausgabe in der angegebenen Datei.
-l Folgt symbolischen Links, die auf Verzeichnisse zeigen.
-x Sucht nur innerhalb desselben Dateisystems wie der Startort.
--noreport Unterdrückt die Zusammenfassung der Anzahl von Dateien und Verzeichnissen am Ende.

Punkte, auf die man bei der Verwendung in großen Verzeichnissen achten sollte

Zuerst Tiefe und Filter begrenzen

Wenn Sie das Stammverzeichnis, das gesamte Benutzer-Home oder große Abhängigkeitsverzeichnisse ohne Einschränkungen durchsuchen, werden sich Ausgabemenge und Verarbeitungszeit erheblich erhöhen. Beschränken Sie zunächst die Tiefe mit -L und schließen Sie unnötige Verzweigungen mit -I oder --gitignore aus.

Verstehen Sie die Kosten von --du und --prune

--du und --prune müssen möglicherweise den gesamten Verzeichnisbaum im Speicher sammeln, bevor Ergebnisse erzeugt werden. In sehr großen Verzeichnissen kann sich die Ausgabe verzögern und der Speicherverbrauch erhöhen.

Überprüfung auf Berechtigungsfehler und sensible Namen

Verzeichnisse, für die der aktuelle Benutzer keine Lese- oder Navigationsrechte hat, werden nicht vollständig angezeigt. Einfach als Administrator auszuführen, um die gesamte Struktur zu sehen, kann den Zugriff unnötig erweitern. Überprüfen Sie daher zuerst die erforderlichen Pfade und Berechtigungen.

Bevor Sie Ausgabedateien an Dokumente oder Fehlerberichte anhängen, überprüfen Sie, dass keine Benutzernamen, internen Serverpfade, geheimen Dateinamen und Projektnamen enthalten sind.

FAQ

tree: Befehl nicht gefunden – warum tritt dieser Fehler auf?

Dies tritt auf, weil tree nicht installiert ist oder der ausführbare Pfad nicht in PATH enthalten ist. Installieren Sie das tree-Paket mit dem Paketmanager Ihrer Distribution und überprüfen Sie mit tree --version.

Wie kann ich Unterverzeichnisse nur bis zu zwei Ebenen anzeigen?

Verwenden Sie tree -L 2. Um einen anderen Pfad zu überprüfen, geben Sie das Verzeichnis am Ende wie tree -L 2 /path/to/check an.

Kann ich die Verzeichnisse node_modules und .git auf einmal ausschließen?

Verwenden Sie tree -I 'node_modules|.git'. Wenn Sie das Muster in einfache Anführungszeichen setzen, verhindert dies, dass die Shell zuerst die vertikale Linie oder Platzhalter interpretiert.

Wie kann ich die tree-Ausgabe schön für ein README formatieren?

Begrenzen Sie die Tiefe und Ausschlüsse wie bei tree -L 3 -I '.git|node_modules|dist' --noreport. Nachdem Sie sichergestellt haben, dass die Ausgabe keine internen Pfade oder sensible Dateinamen enthält, können Sie sie in einen Codeblock einfügen, um die Struktur zu bewahren.

Weitere Angaben zu Syntax, Implementierung und Verfügbarkeit finden Sie unter Tree Upstream-Handbuch, Offizielles Tree-Quell-Repository, Debian Tree-Paketinformationen, Fedora Tree-Paketinformationen und Arch Linux Tree-Paketinformationen.