1273 Stimmen

Auflistung nur Verzeichnisse mit ls in Bash?

Dieser Befehl listet Verzeichnisse im aktuellen Pfad auf:

ls -d */

Was genau bedeutet das Muster */ tun?

Und wie können wir den absoluten Pfad im obigen Befehl angeben (z. B. ls -d /home/alice/Documents ), um nur Verzeichnisse in diesem Pfad aufzulisten?

30voto

Hamish Downer Punkte 15913

En tree ist auch hier sehr nützlich. Standardmäßig zeigt er alle Dateien und Verzeichnisse bis zu einer vollständigen Tiefe an, wobei einige ASCII-Zeichen den Verzeichnisbaum anzeigen.

$ tree
.
 config.dat
 data
    data1.bin
    data2.inf
    sql
|       data3.sql
 images
    background.jpg
    icon.gif
    logo.jpg
 program.exe
 readme.txt

Aber wenn wir nur die Verzeichnisse, ohne den ASCII-Baum, und mit dem vollen Pfad vom aktuellen Verzeichnis aus erhalten wollten, könnten Sie das tun:

$ tree -dfi
.
./data
./data/sql
./images

Die Argumente sind:

-d     List directories only.
-f     Prints the full path prefix for each file.
-i     Makes tree not print the indentation lines, useful when used in conjunction with the -f option.

Und wenn Sie dann den absoluten Pfad benötigen, können Sie zunächst den vollständigen Pfad zum aktuellen Verzeichnis angeben:

$ tree -dfi "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/data/sql
/home/alice/Documents/images

Und um die Anzahl der Unterverzeichnisse zu begrenzen, können Sie die maximale Anzahl der Unterverzeichnisse mit -L level , z.B.:

$ tree -dfi -L 1 "$(pwd)"
/home/alice/Documents
/home/alice/Documents/data
/home/alice/Documents/images

Weitere Argumente finden Sie unter man tree .

18voto

pyrocrasty Punkte 647

Aktuell ls Lösung, einschließlich Symlinks zu Verzeichnissen

Viele Antworten hier verwenden eigentlich nicht ls (oder verwenden Sie es nur im trivialen Sinne von ls -d , während für die eigentliche Suche nach Unterverzeichnissen Wildcards verwendet werden. Ein wahrer ls Lösung ist nützlich, da sie die Verwendung von ls Optionen für die Sortierreihenfolge usw.

Symlinks ausschließen

Eine Lösung mit ls gegeben wurde, aber sie unterscheidet sich von den anderen Lösungen dadurch, dass sie schließt Symlinks aus zu Verzeichnissen:

ls -l | grep '^d'

(möglicherweise durch Rohrleitungen sed o awk um die Dateinamen zu isolieren)

Einschließlich Symlinks

In dem (wahrscheinlich häufigeren) Fall, dass Symlinks zu Verzeichnissen einbezogen werden sollen, können wir die -p Option von ls die es veranlasst, ein Schrägstrich-Zeichen an die Namen von Verzeichnissen (einschließlich Symlinks) anzuhängen:

ls -1p | grep '/$'

oder das Weglassen der Schrägstriche am Ende:

ls -1p | grep '/$' | sed 's/\/$//'

Wir können Optionen hinzufügen zu ls nach Bedarf (bei einer langen Auflistung wird die -1 ist nicht mehr erforderlich).

Anmerkung: wenn wir wollen Schrägstriche am Ende, die aber nicht durch grep können wir die Hervorhebung entfernen, indem wir den tatsächlich übereinstimmenden Teil der Zeile leer lassen:

ls -1p | grep -P '(?=/$)'

16voto

PYK Punkte 2718

Eine einfache Liste des aktuellen Verzeichnisses wäre das:

ls -1d */

Wenn Sie es sortiert und sauber haben wollen:

ls -1d */ | cut -c 1- | rev | cut -c 2- | rev | sort

Erinnern Sie sich: Großgeschriebene Zeichen verhalten sich bei der Sortierung anders

14voto

guesty guesterson Punkte 141

Ich füge dies einfach zu meinem .bashrc Datei (Sie können sie auch einfach in die Befehlszeile eingeben, wenn Sie sie nur für eine Sitzung brauchen/wollen):

alias lsd='ls -ld */'

Dann lsd wird das gewünschte Ergebnis bringen.

14voto

Banning Punkte 336

Das verwende ich

ls -d1 /Directory/Path/*;

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