Der Befehl ls in Linux wird zum Auflisten des Inhalts eines Verzeichnisses verwendet.
Standardmäßig werden alle Inhalte aufgelistet, sei es eine Datei oder ein Verzeichnis oder ein Link oder eine Named Pipe.
Aber was ist, wenn Sie nur die Verzeichnisse auflisten möchten? Wie machst du das?
Wie alles in Linux gibt es mehrere Möglichkeiten, dieselbe Aufgabe zu erfüllen. Das Auflisten nur der Verzeichnisse ist nicht anders:
- ls -d */
- ls -l / grep ‚^d‘
- finden . -maxdepth 1 -Typ d
- echo */
- Baum -d -L 1
Keine Sorge. Ich werde die Dinge im Detail erklären. Hier ist der Inhalt des Verzeichnisses, das ich in den Beispielen hier verwenden werde:
- Verwenden Sie den Befehl ls, um nur Verzeichnisse aufzulisten
- Nur Unterverzeichnisse in einem bestimmten Verzeichnis auflisten
- Kombination aus ls und grep-Befehl verwenden
- Verwenden Sie den Befehl find, um nur Verzeichnisse aufzulisten
- Verwenden Sie den Befehl tree, um nur Verzeichnisse aufzulisten
- echo-Befehl zum Auflisten von Verzeichnissen verwenden
Verwenden Sie den Befehl ls, um nur Verzeichnisse aufzulisten
Es ist immer gut, dies mit dem bekannten Befehl ls zu tun, da dies der Befehl ist, mit dem Sie den Inhalt eines Verzeichnisses anzeigen.
Um nur die Unterverzeichnisse aufzulisten, verwenden Sie die Option -d
mit dem Befehl ls wie folgt:
ls -d */
Hier ist die Ausgabe, die angezeigt wird:
Documents]$ ls -d */another_dir/ my_dir/
Warum */
? Denn ohne sie gibt ls -d
nur den Verzeichnisnamen zurück. Die Option -d
listet Verzeichnisse auf, nicht deren Inhalt (einschließlich Datei, Verzeichnisse usw.).
Das */
ist ein Muster. Mit *
listen Sie den gesamten Inhalt (einschließlich des Inhalts der Unterverzeichnisse) auf, und /
beschränkt das Muster auf Verzeichnisse.
Dieses Bild zeigt den Unterschied ziemlich gut.
Sie können es mit der Option für lange Listen kombinieren -l
und die meisten anderen Optionen:
Documents]$ ls -ld */drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir/
Wenn Sie den abschließenden Schrägstrich (/) am Ende der Verzeichnisnamen nicht möchten, können Sie ihn mit dem Befehl cut ausschneiden:
Documents]$ ls -ld */ | cut -f1 -d'/'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Nur Unterverzeichnisse in einem bestimmten Verzeichnis auflisten
Der obige Befehl funktioniert im aktuellen Verzeichnis. Was ist, wenn Sie sich nicht im selben Verzeichnis befinden?
In dieser Situation können Sie */
am Ende des Pfads des Verzeichnisses mit ls -d
:
ls -d Path/To/Dir/*/
Hier ist ein Beispiel, in dem ich das Dokumentenverzeichnis verlasse und dann nur die Verzeichnisse im Dokumentenverzeichnis aufliste:
~]$ ls -ld Documents/*/drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 Documents/another_dir/drwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 Documents/my_dir/
Haben Sie bemerkt, dass das versteckte Verzeichnis nicht aufgelistet wird? Das ist ein Manko dieser Methode. Sie können ls -d .*/
verwenden, um versteckte Verzeichnisse anzuzeigen, aber es werden nur versteckte Verzeichnisse angezeigt.
Kombination aus ls und grep-Befehl verwenden
Sie können sich immer auf den guten alten grep-Befehl verlassen, um die Ausgabe nach bestimmten Inhalten zu filtern.
Wenn Sie den Inhalt lange auflisten, können Sie die Verzeichnisse identifizieren, die mit d
beginnen.
Sie können grep verwenden, um die Inhalte zu filtern, die mit d beginnen:
ls -l | grep '^d'
Dies gibt Ihnen jedoch viel mehr Felder als nur die Verzeichnisnamen:
Documents]$ ls -l | grep '^d'drwxrwxr-x. 1 abhishek abhishek 16 Nov 7 18:22 another_dirdrwxrwxr-x. 1 abhishek abhishek 44 Nov 7 18:22 my_dir
Verwenden Sie den Befehl find, um nur Verzeichnisse aufzulisten
So verwenden Sie den Befehl find, um nur die Unterverzeichnisse aufzulisten:
find directory_path -maxdepth 1 -type d
Ich hoffe, Sie sind mit dem Befehl find vertraut. Ich werde es trotzdem erklären.
Mit type d
bitten Sie den Befehl find, nur nach Verzeichnissen zu suchen.
Mit maxdepth 1
bitten Sie den Befehl find, die Suche nur auf der aktuellen Ebene zu halten (und nicht in die Unterverzeichnisse zu gehen).
Documents]$ find . -maxdepth 1 -type d../my_dir./another_dir./.my_hidden_dir
Wie Sie in der obigen Ausgabe sehen können, wird auch das versteckte Verzeichnis angezeigt.
Verwenden Sie den Befehl tree, um nur Verzeichnisse aufzulisten
Wenn Sie nur die Verzeichnisse auflisten möchten, können Sie auch den Befehl tree verwenden.
Standardmäßig gibt Ihnen der Befehl tree die vollständige Verzeichnisstruktur. Sie können es so ändern, dass nur Verzeichnisse und nur auf der aktuellen Ebene angezeigt werden.
tree -dai -L 1
- d – Suchen Sie nur nach Verzeichnissen
- a – Suchen Sie auch nach versteckten Dateien und Verzeichnissen
- i – Entfernen Sie die Baumstruktur aus dem Display
- L 1 – Gehen Sie nicht in die Unterverzeichnisse
Hier ist die Ausgabe:
Documents]$ tree -dai -L 1.another_dirmy_dir.my_hidden_dir3 directories
echo-Befehl zum Auflisten von Verzeichnissen verwenden
Der unwahrscheinliche Kandidat? Sie werden überrascht sein zu wissen, dass echo Befehl in Linux kann auch für die Anzeige des Inhalts eines Verzeichnisses verwendet werden. Versuchen Sie es mit echo *
und überzeugen Sie sich selbst.
Ähnlich wie beim Befehl ls können Sie auch das Muster */
verwenden, um nur die Verzeichnisse im aktuellen Arbeitsverzeichnis aufzulisten.
echo */
Hier ist die Ausgabe, die mit der des Befehls ls -d
identisch ist:
Es könnte mehr Möglichkeiten geben, nur die Verzeichnisse und nicht die Dateien aufzulisten. In der Tat können die hier diskutierten Methoden einige Wenn und Aber haben, basierend auf dem, wonach Sie suchen.
Wenn Sie nur die Verzeichnisse anzeigen möchten, funktionieren die meisten der von mir besprochenen Befehle. Wenn Sie etwas Spezifischeres wünschen, z. B. nur den Verzeichnisnamen mit Schrägstrich usw. zu erhalten, müssen Sie einige Formatierungen selbst vornehmen.
Ich hoffe, Sie finden diesen Linux-Tipp hilfreich. Fragen und Anregungen sind jederzeit willkommen.