列出给定位置的直接子目录的简单方法是什么?

列出给定位置的直接子目录的简单方法是什么?

是否有内置命令或更简洁的方法来实现这一点?

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 排在最后。

相关内容