it-swarm.com.de

Nur Verzeichnisse in UNIX auflisten

Ich möchte nur die Verzeichnisse im angegebenen Pfad auflisten (ls hat keine solche Option). Kann dies auch mit einem einzigen Zeilenbefehl erfolgen?

210
S'am

Versuche dies ls -d */, um Verzeichnisse im aktuellen Verzeichnis aufzulisten

305
David Hancock

Versuche dies:

find . -maxdepth 1 -type d
92
Robin

Folgende

find * -maxdepth 0 -type d

filtert grundsätzlich die Erweiterung von '*', d. h. alle Einträge im aktuellen Verzeichnis, nach der Bedingung -type d.

Vorteil ist, dass die Ausgabe mit ls -1 * Identisch ist, jedoch nur mit Verzeichnissen und Einträgen, die nicht mit einem Punkt beginnen

20
radiospiel

Sie können ls -d */ oder tree -d

Eine andere Lösung wäre das Globbing. Dies hängt jedoch von der verwendeten Shell ab und davon, ob das Globbing für Verzeichnisse unterstützt wird.

Zum Beispiel ZSH:

zsh # ls *(/)
13
echox

Da es Dutzende von Möglichkeiten gibt, ist hier eine andere:

tree -d -L 1 -i --noreport
  • -d: Verzeichnisse
  • -L: Tiefe des Baumes (daher 1, unser Arbeitsverzeichnis)
  • -i: keine Einrückung, nur Namen drucken
  • --noreport: Keine Informationen am Ende der Baumliste melden
10
alleen1
ls -l | grep '^d'

Sie können einen Alias ​​erstellen und in die Profildatei einfügen

alias ld="ls -l| grep '^d'"
9
somesh chandra
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
7
mda

Um die Verzeichnisse im aktuellen Arbeitsverzeichnis aufzulisten, ls -d */ kann verwendet werden. Und wenn Sie die versteckten Verzeichnisse auflisten müssen, verwenden Sie diesen Befehl ls -d .*/

6
kvivek

verwenden Sie diese Option, um eine Verzeichnisliste abzurufen

ls -d */ | sed -e "s/\///g"
6
Lakshmi

Die Antwort hängt von Ihrer Shell ab.

In zsh können Sie beispielsweise Folgendes tun:

echo *(/)

Alle Verzeichnisse im aktuellen Arbeitsverzeichnis werden angezeigt.

Weitere Informationen finden Sie unter man zshexpn .

Ein alternativer Ansatz wäre die Verwendung von find(1), die für die meisten Unix-Varianten funktionieren sollte:

find . -maxdepth 1 -type d -print  

find(1) hat viele Verwendungsmöglichkeiten, daher würde ich definitiv man find empfehlen.

5
Johnsyweb

Sie können den Befehl tree mit dem Schalter d verwenden, um dies zu erreichen.

% tree -d tstdir
tstdir
|-- d1
|   `-- d11
|       `-- d111
`-- d2
    `-- d21
        `-- d211

6 directories

sehen man tree Für mehr Information.

4
slm

find specifiedpath -type d

Wenn Sie nicht in Unterverzeichnissen wiederkehren möchten, können Sie dies stattdessen tun:

find specifiedpath -type d -mindepth 1 -maxdepth 1

Beachten Sie, dass "dot" -Verzeichnisse (deren Name mit .) wird ebenfalls aufgeführt; aber nicht die speziellen Verzeichnisse . Noch ... Wenn Sie keine "Punkt" -Verzeichnisse möchten, können Sie sie einfach grep ausgeben:

find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'

4
DomQ
### If you need full path of dir and list selective dir with "name" of dir(or dir_prefix*):
find $(pwd) -maxdepth 1 -type d -name "SL*"
2
Surya

Wenn ich dieses Verzeichnis habe:

ls -l

lrwxrwxrwx  1 nagios nagios     11 août   2 18:46 conf_nagios -> /etc/icinga
-rw-------  1 nagios nagios 724930 août  15 21:00 dead.letter
-rw-r--r--  1 nagios nagios  12312 août  23 00:13 icinga.log
-rw-r--r--  1 nagios nagios   8323 août  23 00:12 icinga.log.gz
drwxr-xr-x  2 nagios nagios   4096 août  23 16:36 tmp

m alle Verzeichnisse abzurufen, verwenden Sie -L, um Links aufzulösen:

ls -lL | grep '^d'

drwxr-xr-x 5 nagios nagios   4096 août  15 21:22 conf_nagios
drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

Ohne -L:

ls -l | grep '^d'

drwxr-xr-x 2 nagios nagios   4096 août  23 16:41 tmp

conf_nagios Verzeichnis fehlt.

2
c-toesca

Hier ist eine andere Lösung, die verknüpfte Verzeichnisse anzeigt. Ich bevorzuge es ein wenig, weil es eine Teilmenge der "normalen" Ausgabe von ls -l ist:

ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
1
Amnon Harel

Das hat bei mir funktioniert:

`ls -F | grep /`

(Aber ich wechsle zu echo */ wie von @nos) erwähnt

1
FractalSpace