How could I list sub-directories with ls, with '-d' only the current directory is shown. I want something like find . -type d -maxdepth 1
would give me.
Asked
Active
Viewed 7.4k times
27

Bernhard
- 8,583
- 4
- 41
- 42
-
2Perhaps you wanted to write: `find . -type d -maxdepth 1` (with no `=` for `-maxdepth`. – Chen Levy Mar 02 '11 at 13:43
3 Answers
36
This should help:
ls -d */
*/
will only match directories under the current dir. The output directory names will probably contain the trailing '/' though.

Costi Ciudatu
- 37,042
- 7
- 56
- 92
-
4To be pedantic about this, you should do `ls -d .*/ */` or `shopt -s dotglob; ls -d .*/`, otherwise directories starting with dot (`.`) will not be listed. – Chen Levy Mar 02 '11 at 13:41
-
-
@ZhaoGang See https://stackoverflow.com/questions/14352290/listing-only-directories-using-ls-in-bash-an-examination – Costi Ciudatu Jul 23 '19 at 21:03
7
You can combine with grep:
ls -l | grep '^d'
To get just the filenames:
ls -l | grep '^d' | awk '{ print $9 }'
You can make this into a handy alias:
alias ldir="ls -l | grep '^d'"

dogbane
- 266,786
- 75
- 396
- 414
-
2If you are already using `awk`, `grep` is superfluous: `ls -l | awk '/^d/ { print $9 }'` – Chen Levy Mar 02 '11 at 13:48