692 Stimmen

Linux-Befehl zum Ausdrucken der Verzeichnisstruktur in Form eines Baums

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

folder1
   a.txt
   b.txt
folder2
   folder3

988voto

crafty Punkte 9466

Ist es das, wonach Sie suchen? Baum ? Es sollte in den meisten Distributionen enthalten sein (vielleicht 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 Betreibers.

Sie können die Option hinzufügen -L # donde # wird durch eine Zahl ersetzt, um die maximale Rekursionstiefe anzugeben.

entfernen -d um auch Dateien anzuzeigen.

450voto

Soufiane Hassou Punkte 16599

Sie können diese verwenden:

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

Es wird eine grafische Darstellung der aktuellen Unterverzeichnisse ohne Dateien angezeigt in ein paar Sekunden z.B. in /var/cache/ :

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

Quelle

85voto

Pavan Kumar Punkte 3626

Dieser Befehl funktioniert wie folgt sowohl Ordner als auch Dateien anzeigen .

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

Beispielhafte Ausgabe:

.
 |-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 aquí . Es ist als Kommentar untergetaucht und die Veröffentlichung als Antwort hilft den Benutzern, es leicht zu erkennen.

46voto

JavaSheriff Punkte 6357

Da es ein erfolgreicher Kommentar war, füge ich ihn als Antwort hinzu:
So drucken Sie die Verzeichnisstruktur in Form eines Baums aus,
MIT DATEIEN

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

22voto

msa Punkte 540

Da ich mit der Ausgabe anderer (Nicht-) Programme nicht sehr zufrieden war, habe ich tree ) Antworten (siehe mein Kommentar zur Antwort von Hassou ), habe ich versucht zu imitieren tree s-Ausgang ein wenig mehr.

Es ist ähnlich wie bei der Antwort von Robert, aber die horizontalen Linien beginnen nicht alle am Anfang, sondern dort, wo sie beginnen sollen. Musste verwenden perl aber in meinem Fall, auf dem System, auf dem ich keine tree , perl ist verfügbar.

ls -aR | grep ":$" | perl -pe 's/:$//;s/[^-][^\/]*\//    /g;s/^    (\S)/ \1/;s/(^    |    (?= ))/   /g;s/    (\S)/ \1/'

Ausgabe (gekürzt):

.
 fd
 net
    dev_snmp6
    nfsfs
    rpc
       auth.unix.ip
    stat
    vlan
 ns
 task
    1310
       net
          dev_snmp6
          rpc
             auth.unix.gid
             auth.unix.ip
          stat
          vlan
       ns

Vorschläge zur Vermeidung der überflüssigen vertikalen Linien sind willkommen :-)

Ich mag immer noch Bens Lösung im Kommentar von Hassous Antwort sehr viel, ohne die (nicht ganz korrekten) Zeilen ist es viel sauberer. Für meinen Anwendungsfall habe ich zusätzlich die globale Einrückung entfernt und die Option hinzugefügt, auch ls versteckte Dateien, etwa so:

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

Ausgabe (noch stärker gekürzt):

.
  fd
  net
    dev_snmp6
    nfsfs
    rpc
      auth.unix.ip
    stat
    vlan
  ns

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X