2

Is there a built-in command or a less verbose way of achieving this?

find /var/foo -maxdepth 1 -mindepth 1 -type d

Or should I just make a tiny shell script or function if I'm doing this sort of thing often?

2 Answers 2

3
ls -d */

"-d" means don't delve into the directories, the "*/" only matches directories.

3
  • What about directories that start with a "." ? I have edited my question since the title asks for subdirectories, and specifying only maxdepth also returns ./ which is not desired
    – Bribles
    Mar 27, 2010 at 0:01
  • "ls -d .[A-z0-9]*" will catch most (but not necessarily all).
    – mibus
    Mar 31, 2010 at 4:02
  • Well, you'd need to do ls -d */ .[A-z0-9]*/ to get both regular and a subset of hidden files.
    – Bribles
    Mar 31, 2010 at 21:52
2

The shortest command seems to be

ls -d /var/foo/{*,.[^.]*,..[^.]*}/

I believe that will non-recursively list all the subdirectories of /var/foo, no matter how stupidly named the directories are or if non-ASCII characters are involved.

user@comp:~$ ls -1d /var/foo/{*,.[^.]*,..[^.]*}/
/var/foo/ . . . . . /
/var/foo/-d/
/var/foo/. . . . . ./
/var/foo/. d/
/var/foo/.-d/
/var/foo/..d/
/var/foo/.d/
/var/foo/.字_Ж/
/var/foo/d/
/var/foo/dir1/
/var/foo/dir2/
/var/foo/字/

However, find /var/foo -maxdepth 1 -mindepth 1 -type d is easier to both remember and type.

Below is my original self-answer.

If one cares not about files beginning with a dot then mibus' answer of

ls -d /var/foo/*/

would be short and effective. However if one would like the hidden files to be included then one needs to either stick with

find /var/foo -maxdepth 1 -mindepth 1 -type d

or try

ls -FA /var/foo | grep /

The -F places / and the end of directory names (as well as other characters for other types of files). The -A causes files starting with a dot to be included, except for '.' and '..'. That is why -a is not used. The grep won't get any false positives since '/' is not allowed in filenames (at least for POSIX filesystems).

Regarding performance, on my Ubuntu Jaunty installation with just shy of 32k files and directories in /var/foo, find is the fastest, followed by ls -d, and ls -FA with grep comes in last.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .