Gibt es eine Option mit dem Befehl 'ls', bei der nur die Verzeichnisse angezeigt werden?

74

Manchmal muss ich nur die Verzeichnisse überprüfen, nicht die Dateien. Gibt es eine Option mit dem Befehl ls? Oder gibt es ein Dienstprogramm dafür?

EDIT : Ich benutze Mac OS X und ls -dgebe mir ., obwohl ich Verzeichnisse habe.

Prosseek
quelle
4
Kann jemand erklären, warum ls -dnur gibt .und warum das */am Ende hinzugefügt werden muss, damit es funktioniert?
KWD
3
@cwd Wenn Sie keine Dateien angeben, ist der lsStandardwert "" .. Und -dbedeutet, dass Sie den Inhalt des Verzeichnisses nicht drucken, sondern das Verzeichnis selbst drucken.
Mikel
1
@cwd versuchen, ls -pes zu verwenden, zeigt die /nach den Verzeichnisnamen. Es */handelt sich also nur um ein Muster, das mit dem Verzeichnisnamen und der /Kombination abgeglichen wird .
Pitt
Ich habe eine Funktion erstellt, die die Antwort von @ Steven_D für meine ~ / .bash_aliases-Datei implementiert
rjurney

Antworten:

84

Ich weiß, dass es bereits eine ausgewählte Antwort gibt, aber Sie können das angeforderte Verhalten mit nur erhalten ls:

ls -ld -- */

(Beachten Sie, dass das '-' das Ende der Parameter markiert und verhindert, dass Ordnernamen, die mit einem Bindestrich beginnen, als weitere Befehlsoptionen interpretiert werden.)

Dadurch werden alle nicht ausgeblendeten Verzeichnisse (es sei denn, Sie konfigurieren die Globs Ihrer Shell, um sie zu erweitern) im aktuellen Arbeitsverzeichnis aufgelistet, in dem sie ausgeführt werden (beachten Sie, dass sie auch symbolische Links zu Verzeichnissen enthalten). Um alle Unterverzeichnisse eines anderen Ordners abzurufen, versuchen Sie einfach:

ls -ld /path/to/directory/*/

Beachten Sie, dass -l optional ist.

Steven D
quelle
5
Nett. Ich habe nie darüber nachgedacht, dass Verzeichnisse /am Ende implizit sind - aber jetzt, wo ich sehe, dass Sie antworten, macht es Sinn. Immerhin fügt es die Tab-Vervollständigung hinzu.
gvkv
-d for dir, -l for long format. Was ist der Zweck von --?
Dineshkumar
1
Obwohl dies kurz aussieht und in den meisten Fällen funktioniert, kann es sein, dass Sie diesen Ansatz nicht verwenden möchten, wenn ein echtes Verzeichnis benötigt wird, nicht der Symlink eines Verzeichnisses. Ist findalso eigentlich eine gute Wahl in diesem Fall.
Biocyberman
1
findhat auch den Vorteil, wenn die Anzahl der Verzeichnisse die maximale Argumentlänge überschreitet.
Steven D
Arbeiten nach hinten, ich habe gerade Sie einfach alles mit einer Erweiterung ignorieren können: ls -alhF --ignore=*.*. Ich .myHiddenFolder
bin
14

Nein, aber ein einfacher findBefehl wird es tun:

find . -type d -depth 1

oder grep

ls -F | grep /

Sie können dann bei Bedarf einen der beiden Aliasnamen verwenden.

gvkv
quelle
6
Auf Ubuntu 14.04 war es -maxdepth 1. findIch wollte auch, dass ich die Bestellung find . -maxdepth 1 -type d
umdrehe
Diese ls -F | grep /Lösung wirkt Wunder! Es scheint das einzige zu sein, das ich auf meinem FreeBSD-Rechner zum Arbeiten bringen kann. Ich denke mit Fisch bedeutet, dass etwas mit */möglicherweise nicht funktioniert?
cjm
Ich habe noch nie mit Fish gearbeitet, daher bin ich mir nicht sicher, aber die Option -F kann Wunder wirken.
GVKV
7

Ich mag das Baum- Dienstprogramm, um einen Überblick über die Verzeichnisstruktur zu bekommen. Es ist in MacPorts und allen Linux-Distributionen verfügbar, die ich ausprobiert habe.

tree -d -L 2

Das würde alle Verzeichnisse anzeigen, zwei Ebenen tief.

Claes Mogren
quelle
6

Ich musste auch versteckte Verzeichnisse anzeigen, also habe ich den obigen Vorschlag an meine Bedürfnisse angepasst

ls -d -- */ .*/

(abhängig von der Shell, die auch .und enthalten kann ..)

Neil Chandler
quelle
2

Mit zsh(wie es standardmäßig unter macOS /bin/shvorhanden war), würden Sie Glob-Qualifikatoren verwenden, um Dateien basierend auf ihrem Typ auszuwählen:

  • Nicht ausgeblendete Verzeichnisse auflisten:

    ls -d -- *(/)
    
  • Alle Verzeichnisse auflisten:

    ls -d -- *(D/)
    

    ( .und ..sind immer ausgeschlossen, fügen Sie sie einzeln hinzu, wenn Sie sie wollen)

  • Fügen Sie auch Symlinks zu Verzeichnissen hinzu:

    ls -d -- *(D-/)
    

    ( -Lässt also nach Symlink-Auflösung weitere Qualifier gelten).

Stéphane Chazelas
quelle
-1

Ich denke, ls hat einen Fehler unter Mac OS X. Ein Workaround ist die Verwendung von grep ... ls -l / | grep "^d"

duffbeer703
quelle
1
Es ist schön zu wissen, dass ich nicht die einzige Person bin, die den grep "^d"Hack benutzt
Michael Mrozek
6
Soweit ich weiß, ist das von ihm beschriebene Verhalten kein Fehler und dasselbe, wenn man GNU ls verwendet. Die Option -d zeigt die Liste für das Verzeichnis und nicht den Inhalt an. Um zu sehen, warum dies nützlich sein kann, sehen Sie den Unterschied zwischen: ls -l /homeundls -dl /home
Steven D
Karat ist nichts Besonderes für die Schale. Sie können nur verwenden ls -l / | grep ^d. Wenn Sie werden gehen Anführungszeichen verwenden, da Sie keine Parameter Expansion benötigen, machen sie einzelne Anführungszeichen. ls -l / | grep '^d'. Ja, ich bin ein Pedant. Aber wirklich, mach das. :)
Wildcard
-1
$ ls -p | grep /

Das -pFlag lsfügt nach jedem Dateinamen einen Schrägstrich (`/ ') ein, wenn es sich bei dieser Datei um ein Verzeichnis handelt.

Jamin Shanti
quelle
-2

Am einfachsten ist es, den folgenden Befehl einzugeben. Dies funktioniert auf den meisten UNIX- und Linux-Plattformen und -Versionen. Sie können das überspringen, -Fwenn Sie möchten, aber es ist das Argument, das das / am Ende des Verzeichnisnamens anfügt. Das -CArgument erfasst nur Verzeichnisnamen - alle im aktuellen Verzeichnis. Wenn Sie nur Verzeichnisse und Unterverzeichnisse im aktuellen Pfad anzeigen möchten, fügen Sie einfach das -RArgument ( ls -CFR) hinzu.

# ls -CF
/dir1  /dir2  /dir3  /beaches  /Work  /Other 
Willie Lopez
quelle
1
In allen lsImplementierungen, die ich kenne und in der POSIX-Spezifikation von ls, -Cist die Ausgabe in Spalten , nicht Nicht-Verzeichnisdateien zu überspringen. In Ihrem Beispiel /werden die vor den Dateinamen gedruckt, was keine lsImplementierung tun würde. Mit -F, /wird an den Dateinamen für Verzeichnisdateien angehängt.
Stéphane Chazelas
Als ich diese Antwort sah, fragte ich mich: "Wo ist das wahr?"
G-Man
-3
ls -G

Dadurch werden Ihre Verzeichnisse in blau angezeigt

user197967
quelle
1
Werden bei Verwendung dieses Befehls nur die Verzeichnisse angezeigt?
don_crissti