Ich möchte nur die Verzeichnisse im angegebenen Pfad auflisten ( ls
hat keine solche Option). Kann dies auch mit einem einzeiligen Befehl erfolgen?
Ich möchte nur die Verzeichnisse im angegebenen Pfad auflisten ( ls
hat keine solche Option). Kann dies auch mit einem einzeiligen Befehl erfolgen?
Antworten:
Versuchen Sie dies, ls -d */
um Verzeichnisse im aktuellen Verzeichnis aufzulisten
ls -al | grep '^d'
- das ist viel prägnanter.
*/
Anzeige nur Elemente erzwingt, die mit einem Schrägstrich enden, der in diesem Fall ein Verzeichnis wäre, selbst wenn die -F
Option von ls
nicht verwendet wird. Ähnlich ls *php
wie und wie alle Dateien angezeigt werden, die mit php
einem Verzeichnis enden .
echo */
werde es auch tun
Versuche dies:
find . -maxdepth 1 -type d
ls
Lösungen find
ist er allein für die Ausführung der Aufgabe verantwortlich (ohne sich auf die Erweiterung des Shell-Platzhalters zu verlassen, die Grenzen setzen kann). Es ist auch viel prägnanter.
find * -maxdepth 0 -type d
.
find
normalerweise nur die Ordner in Tiefe 1 ausgibt.
Folgende
find * -maxdepth 0 -type d
filtert grundsätzlich die Erweiterung von '*', dh alle Einträge im aktuellen Verzeichnis, nach der -type d
Bedingung.
Vorteil ist, dass die Ausgabe gleich ist wie ls -1 *
, aber nur mit Verzeichnissen und Einträgen nicht mit einem Punkt beginnen
Sie können ls -d */
oder verwendentree -d
Eine andere Lösung wäre Globbing, dies hängt jedoch von der verwendeten Shell ab und davon, ob Globbing für Verzeichnisse unterstützt wird.
Zum Beispiel ZSH:
zsh # ls *(/)
tree
?
tree
nicht standardmäßig installiert (obwohl sie sich in den Repositorys befindet).
tree
Befehl kein nativer Unix-Befehl ist (bitte korrigieren Sie mich, wenn ich falsch liege ).
Da es Dutzende von Möglichkeiten gibt, ist hier eine andere:
tree -d -L 1 -i --noreport
tree -d -L 1 -i --noreport | tail -n +2
tree -C -d -L 1 -i --noreport | tail -n+2
ls -l | grep '^d'
Sie können einen Alias erstellen und in die Profildatei einfügen
alias ld="ls -l| grep '^d'"
find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
Verwenden Sie diese Option, um eine Liste der Verzeichnisse abzurufen
ls -d */ | sed -e "s/\///g"
find specifiedpath -type d
Wenn Sie nicht in Unterverzeichnissen rekursiv arbeiten möchten, können Sie stattdessen Folgendes tun:
find specifiedpath -type d -mindepth 1 -maxdepth 1
Beachten Sie, dass auch "Punkt" -Verzeichnisse (deren Name mit beginnt .
) aufgelistet werden. aber nicht die speziellen Verzeichnisse .
noch ..
. Wenn Sie keine "Punkt" -Verzeichnisse möchten, können Sie sie einfach grep
löschen:
find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'
mindepth
, um loszuwerden .
! 😁
Die Antwort hängt von Ihrer Shell ab .
In zsh
können Sie beispielsweise Folgendes tun:
echo *(/)
Alle Verzeichnisse im aktuellen Arbeitsverzeichnis werden angezeigt.
Sehen man zshexpn
für weitere Informationen.
Ein alternativer Ansatz wäre die Verwendung find(1)
, die für die meisten Unix- Varianten funktionieren sollte:
find . -maxdepth 1 -type d -print
find(1)
hat viele Verwendungszwecke, daher würde ich es auf jeden Fall empfehlen man find
.
Sie können den tree
Befehl mit seinem d
Schalter verwenden, um dies zu erreichen.
% tree -d tstdir
tstdir
|-- d1
| `-- d11
| `-- d111
`-- d2
`-- d21
`-- d211
6 directories
siehe man tree
für weitere Informationen.
tree
. Na ja, war nicht meine Absicht, irgendjemandes Donner zu stehlen.
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
Um 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
Das Verzeichnis conf_nagios fehlt.
Das hat bei mir funktioniert:
`ls -F | grep /`
(Aber ich echo */
wechsle zu wie von @nos erwähnt)
Hier ist eine weitere Lösung, die verknüpfte Verzeichnisse anzeigt. Ich bevorzuge es etwas, weil es eine Teilmenge der "normalen" ls-l-Ausgabe ist:
ls -1d */ | rev | cut -c2- | rev | xargs ls -ld --color=always
In Bash:
ls -d */
Listet alle Verzeichnisse auf
ls -ld */
listet alle Verzeichnisse in Langform auf
ls -ld */ .*/
listet alle Verzeichnisse, einschließlich versteckter Verzeichnisse, in Langform auf.
Ich habe kürzlich zu zsh (MacOS Catalina) gewechselt und festgestellt, dass:
ls -ld */ .*/
funktioniert nicht mehr, wenn das aktuelle Verzeichnis keine versteckten Verzeichnisse enthält.
zsh: no matches found: .*/
Der obige Fehler wird gedruckt, es können jedoch auch keine Verzeichnisse gedruckt werden.
ls -ld *(/) .*(/)
Scheitert auch auf die gleiche Weise.
Bisher habe ich festgestellt, dass dies:
ls -ld */;ls -ld .*/
ist eine anständige Problemumgehung. Das ;
ist ein Befehlstrennzeichen. Wenn jedoch keine versteckten Verzeichnisse vorhanden sind, werden Verzeichnisse aufgelistet und der Fehler für keine versteckten Verzeichnisse ausgegeben:
foo
bar
zsh: no matches found: .*/
ls
Befehl ist die Shell für Liste Inhalt des aktuellen Verzeichnisses
-l
wird das Flag , um anzugeben , dass Sie zur Liste wollen in Longford (ein Element pro Zeile + ein paar anderen coolen Informationen)
-d
ist die Flagge alle Verzeichnisse zur Liste „als Dateien“ und nicht rekursiv
*/
ist Das Argument 'Alle Dateien auflisten, die mit einem Schrägstrich enden'
*
ist ein einfacher Regex-Befehl für "alles". */
Die Shell wird daher aufgefordert, "alles aufzulisten, was mit '/' endet."
Sieheman ls
für weitere Informationen.
Ich sage das:
alias lad="ls -ld */;ls -ld .*/"
in meiner .zshrc, und es scheint gut zu funktionieren.
HINWEIS: Das habe ich auch entdeckt
ls -ld .*/ 2> /dev/null
funktioniert nicht, da immer noch Fehler auf dem Terminal gedruckt werden. Ich werde meine Antwort aktualisieren, wenn ich eine Lösung finde.
Um nur Verzeichnisse in einem angegebenen Pfad aufzulisten, geben Sie einfach ls -l | ein grep drw
drw
, und Verzeichnisse ausschließen, die nicht vom Eigentümer gelesen und beschrieben werden können. grep ^d
funktioniert besser.
Lange Liste der Verzeichnisse
Verzeichnisse auflisten
- ls -d * /