是否有内置命令或更简洁的方法来实现这一点?
find /var/foo -maxdepth 1 -mindepth 1 -type d
或者如果我经常做这种事情,我应该编写一个小小的 shell 脚本或函数吗?
答案1
ls -d */
“-d”表示不深入目录,“*/”仅匹配目录。
答案2
最短的命令似乎是
ls -d /var/foo/{*,.[^.]*,..[^.]*}/
我相信将非递归地列出的所有子目录/var/foo
,无论目录的名称多么愚蠢或者是否涉及非 ASCII 字符。
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/字/
但是,find /var/foo -maxdepth 1 -mindepth 1 -type d
更容易记住和输入。
以下是我原来的自我回答。
如果有人不关心以点开头的文件,那么 mibus 的回答是
ls -d /var/foo/*/
会很简短和有效。但是,如果想要包含隐藏文件,则需要坚持使用
find /var/foo -maxdepth 1 -mindepth 1 -type d
或者尝试
ls -FA /var/foo | grep /
-F 放置 / 和目录名称的结尾(以及其他类型文件的其他字符)。-A 导致包含以点开头的文件,但“.”和“..”除外。这就是为什么不使用 -a 的原因。grep 不会得到任何误报,因为文件名中不允许使用“/”(至少对于 POSIX 文件系统而言)。
至于性能,在我的 Ubuntu Jaunty 安装中,/var/foo 中只有不到 32k 个文件和目录,find 是最快的,其次是 ls -d,ls -FA 和 grep 排在最后。