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.




