Linux-Befehl zum Drucken der Verzeichnisstruktur in Form eines Baums


510

Gibt es einen Linux-Befehl, den ich von einem Bash-Skript aus aufrufen kann, das die Verzeichnisstruktur in Form eines Baums druckt, z.

folder1
   a.txt
   b.txt
folder2
   folder3

7
Lauf einfach find. Oder find . -not -path '*/\.*'um Dateien und Ordner auszublenden, die mit beginnen .. Wenn Sie eine Ausgabe mit Leerzeichen haben möchten, wie in der Frage, verwenden Sie diese mit diesem Skript "Prettifier suchen":find . -not -path '*/\.*' | python -c "import sys as s;s.a=[];[setattr(s,'a',list(filter(lambda p: c.startswith(p+'/'),s.a)))or (s.stdout.write(' '*len(s.a)+c[len(s.a[-1])+1 if s.a else 0:])or True) and s.a.append(c[:-1]) for c in s.stdin]"
Benutzer

11
Sollten solche Fragen nicht zu SuperUser migriert und nicht geschlossen werden?
Balmipour

12
Ich denke nicht, dass diese Frage es verdient, als "Off Topic" geschlossen zu werden. Die Tags scheinen richtig zu sein.
Sanket Berde

14
Die Richtlinie, Fragen ohne Migration zu schließen, ist sowohl für den Stapelüberlauf als auch für das menschliche Wissen im Allgemeinen schädlich. In den letzten 3 Tagen wurde jede einzelne Frage, die ich gegoogelt und auf die ich gestoßen bin, aus ähnlichen Gründen geschlossen, und es konnten keine weiteren Aktivitäten stattfinden. Dies bedeutet, dass niemand es aktualisieren kann, niemand eine bessere Antwort geben kann und der Stackoverflow kurzsichtig oder elitär wirkt. Stackoverflow sollte eine Migration in Betracht ziehen, wenn bei einem Thema diese Bedingungen festgestellt werden.
Nein,

5
Ich stimme @NickYeates zu. Ich bin Ende September 2017 hier und finde immer noch Antworten auf dieselbe Frage. Denken Sie langfristig, wenn wir diese Frage- und Antwortrichtlinien entwerfen!
Alex

Antworten:


774

Ist es das, was du für einen Baum suchst ? Es sollte in den meisten Distributionen enthalten sein (möglicherweise als optionale Installation).

~> tree -d /proc/self/
/proc/self/
|-- attr
|-- cwd -> /proc
|-- fd
|   `-- 3 -> /proc/15589/fd
|-- fdinfo
|-- net
|   |-- dev_snmp6
|   |-- netfilter
|   |-- rpc
|   |   |-- auth.rpcsec.context
|   |   |-- auth.rpcsec.init
|   |   |-- auth.unix.gid
|   |   |-- auth.unix.ip
|   |   |-- nfs4.idtoname
|   |   |-- nfs4.nametoid
|   |   |-- nfsd.export
|   |   `-- nfsd.fh
|   `-- stat
|-- root -> /
`-- task
    `-- 15589
        |-- attr
        |-- cwd -> /proc
        |-- fd
        | `-- 3 -> /proc/15589/task/15589/fd
        |-- fdinfo
        `-- root -> /

27 directories

Beispiel von der Webseite des Betreuers.

Sie können die Option hinzufügen , -L #wo #durch eine Zahl ersetzt wird, die maximale Rekursionstiefe zu spezifizieren.

Entfernen -d, um auch Dateien anzuzeigen.


54
Hinweis für jeden Besucher, der dies sieht: Entfernen -d, um auch Dateien anzuzeigen!
Afr

29
Hinweis für jeden Besucher, der dies sieht: Die Manpage listet eine LKW-Ladung weiterer Flaggen für Sie auf :)
oivvio

43
So installieren Sie unter Mac OS X mit Homebrew: brew install tree
Funfuntime

2
So installieren Sie auf Cygwin apt-cyg install tree(vorausgesetzt, Sie haben apt-cyg installiert)
Blockloop

2
Nicht einmal Ubuntu 16.04 kommt damit. Verwendung apt-get install treewird es installieren.
Romeo Sierra

331

Sie können dieses verwenden:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'

In wenigen Sekunden wird eine grafische Darstellung der aktuellen Unterverzeichnisse ohne Dateien angezeigt , z. B /var/cache/.:

   .
   |-apache2
   |---mod_cache_disk
   |-apparmor
   |-apt
   |---archives
   |-----partial
   |-apt-xapian-index
   |---index.1
   |-dbconfig-common
   |---backups
   |-debconf

Quelle


7
Wenn Sie es mit Leerzeichen wollen, eher wie das OP angefordert, dann dies: ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
Ben

Wie kann ich diese Dotfiles ignorieren lassen? ZB verhindern, dass es den Inhalt von auflistet .git?
GMA

@ GeorgeMillo siehe meinen Kommentar
Benutzer

32
Druckt keine Dateien.
Tomáš Zato - Wiedereinsetzung Monica

36
mit Dateien: find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
JavaSheriff

18

Versuchen Sie Folgendes, um Hassous Lösung zu Ihrem .bashrc hinzuzufügen:

alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/   /'"'"' -e '"'"'s/-/|/'"'"

6
Achten Sie auf das Zeilenumbruchzeichen am Ende der ersten Zeile, wenn Sie dieses direkt kopieren
Rahul

2
Netter Alias. Aber am Ende fehlt '' (2 einfache Anführungszeichen). Es funktioniert auch ohne, aber ... wenn Sie am Ende weitere Befehle hinzufügen möchten, werden Sie feststellen, dass das Literal nicht vollständig ist. Also sollte es gehen alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"''
Hero Qu

7

Mit diesem Befehl werden sowohl Ordner als auch Dateien angezeigt .

find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"

Beispielausgabe:

.
 |-trace.pcap
 |-parent
 | |-chdir1
 | | |-file1.txt
 | |-chdir2
 | | |-file2.txt
 | | |-file3.sh
 |-tmp
 | |-json-c-0.11-4.el7_0.x86_64.rpm

Quelle: Kommentar von @javasheriff hier . Es wird als Kommentar eingetaucht und als Antwort veröffentlicht, sodass Benutzer es leicht erkennen können.


für python3 fand ich es find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"gut
patroqueeet

3

Ich verschönere die Ausgabe von @ Hassous Antwort mit:

ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'

Dies ist der Ausgabe von treejetzt sehr ähnlich :

.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh

Sie können auch einen Alias ​​daraus machen:

alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''

Übrigens treeist in einigen Umgebungen wie MinGW nicht verfügbar. Die Alternative ist also hilfreich.


Gitbash unter Windows mag den letzten Ausdruck nicht, er besagt, dass er nicht beendet ist
Leos Literak

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.