GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Der Befehl 'ls -d' zeigt keine Verzeichnisse an. Gibt es eine Möglichkeit, 'ls' dazu zu bringen, nur Verzeichnisse anstelle von Dateien und Verzeichnissen anzuzeigen?

Ihre Erwartungen basieren auf DOS Think/Windows Think und sind falsch. Unter MS-DOS, Windows und einigen anderen IBM/Microsoft-Betriebssystemen wird die Wildcard-Erweiterung durch den Befehl selbst und Dinge wie /a durchgeführt Option zum dir fungieren während der Platzhaltererweiterung als Attributfilter. dir erweitert Platzhalter wie * , die der Befehlsinterpreter unverändert an ihn übergibt, und wenn /a angegeben ist, wendet es die entsprechenden Filter auf das an, was zurückgegeben wird. (Auf einigen Betriebssystemen können die Attributfilter dem Systemaufruf zum Auflisten eines Verzeichnisses übergeben werden, und der Kernel des Betriebssystems oder seine Dateisystemtreiber wenden sie selbst an.)

Auf Unices und Linux wird die Wildcard-Erweiterung von der Shell durchgeführt und berücksichtigt keine Berechtigungen. Wenn Sie im Stammverzeichnis

ausführen
ls *

was zum ls Befehl selbst empfängt aus der Shell ist (etwas wie)

ls bin home opt var boot dev tmp etc lost+found root usr

Was zum -d /--directory Option ist auszuschalten, was normalerweise als nächstes passiert . Was normalerweise als nächstes passiert, ist ls schaut sich jedes seiner Argumente der Reihe nach an, stellt fest, dass es sich um Verzeichnisse handelt, und beschließt, deren Inhalt aufzuzählen. Bei Argumenten, die Dateien benennen, werden nur die Informationen für die Datei selbst ausgegeben. Mit dem -d Option werden Verzeichnisse wie Dateien behandelt. Also ls gibt die Informationen für jedes der Verzeichnisse aus, die als Argumente übergeben werden, genau so, als wären es Dateien.

Also -d nicht eine Option "Nur Verzeichnisse drucken". Tatsächlich gibt es nicht nur keine solche Option; es kann nicht sein eine solche Möglichkeit. Die Wildcard-Erweiterung wird von der Shell durchgeführt und (in einem POSIX sh zumindest) gibt es keine Möglichkeit, die Shell anzuweisen, die Berechtigungs- und Dateitypbits zu überprüfen, wenn sie * erweitert in eine Namensliste. Um nur eine Liste der Verzeichnisnamen zu erhalten, muss entweder der find verwendet werden Befehl, wie in ztank1013 erklärt , oder um den Trick zu verwenden, dass ein Pfadname, der mit einem Schrägstrich endet, den Verzeichniseintrag . impliziert , wie von Jin erklärt . (Jin Der Trick von endet mit der ls Befehl, der die Argumente

empfängt
ls bin/ home/ opt/ var/ boot/ dev/ tmp/ etc/ lost+found/ root/ usr/

weil das Muster */ entspricht tatsächlich Pfadnamen mit zwei Komponenten, wobei die zweite leer ist, und ist daher nicht ganz tun, was gewünscht wurde. Insbesondere werden symbolische Links, die auf Verzeichnisse verweisen, so behandelt, als wären sie Verzeichnisse.)

Das Verhalten von ls -d ohne * ist eine einfache Erweiterung des oben Gesagten. Zu ls muss man einfach noch etwas wissen :Wenn keine Argumente angegeben werden, nimmt es ein Standardargument von . an . Jetzt ohne der -d Option führt das oben genannte Verhalten zum Inhalt des Verzeichnisses mit dem Namen . aufgezählt und die Informationen für ihren Inhalt angezeigt. Mit der -d Option das Verzeichnis . wird so behandelt, als ob es sich um eine Datei handelt, und es werden ihre eigenen Informationen angezeigt, anstatt ihren Inhalt aufzuzählen.


Sie können ls -d */ verwenden , oder ls -d .*/ für versteckte Verzeichnisse.


Versuchen Sie dies

 find . -mindepth 1 -maxdepth 1 -type d

um nur Verzeichnisse unter Ihrem aktuellen Standort zu erhalten.


Linux
  1. Finden Sie Dateien und Verzeichnisse unter Linux mit dem Befehl find

  2. Eine einfache Möglichkeit, Dateien und Verzeichnisse in Linux zu verstecken

  3. Finden Sie die größten Dateien und Verzeichnisse in Linux

  4. Wie erhalte ich eine Anzahl von Dateien in einem Verzeichnis über die Befehlszeile?

  5. Gibt es eine Möglichkeit, die Volume-ID einer .iso-Datei über die Befehlszeile zu ändern?

So verwenden Sie den cp-Befehl zum Kopieren von Dateien und Verzeichnissen

Kopieren Sie Dateien und erstellen Sie gleichzeitig Zielverzeichnisse

Der schnellste Weg zum rekursiven Zählen von Dateien unter Linux

Einfache Möglichkeit, Dateien mit dem Cat-Befehl zusammenzuführen

4 Möglichkeiten zum Übertragen von Dateien und Verzeichnissen unter Linux

Stat-Befehl:Attribute von Dateien und Verzeichnissen anzeigen