Bribles Asked: 2010-03-27 13:34:13 +0800 CST2010-03-27 13:34:13 +0800 CST 2010-03-27 13:34:13 +0800 CST 列出给定位置的直接子目录的简单方法是什么? 772 是否有内置命令或不太冗长的方法来实现这一点? find /var/foo -maxdepth 1 -mindepth 1 -type d 或者如果我经常做这种事情,我应该只做一个小的 shell 脚本或函数吗? linux filesystems command-line-interface find 2 个回答 Voted mibus 2010-03-27T13:40:24+08:002010-03-27T13:40:24+08:00 ls -d */ “-d”表示不深入目录,“*/”只匹配目录。 Best Answer Bribles 2010-03-29T13:23:06+08:002010-03-29T13:23:06+08:00 最短的命令似乎是 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。
“-d”表示不深入目录,“*/”只匹配目录。
最短的命令似乎是
我相信这将非递归地列出 的所有子目录
/var/foo
,无论目录名称多么愚蠢,或者是否涉及非 ASCII 字符。但是,
find /var/foo -maxdepth 1 -mindepth 1 -type d
更容易记住和输入。以下是我最初的自我回答。
如果一个人不关心以点开头的文件,那么 mibus 的回答是
将是简短而有效的。但是,如果希望包含隐藏文件,则需要坚持使用
或尝试
-F 放置 / 和目录名称的结尾(以及其他类型文件的其他字符)。-A 会导致包含以点开头的文件,但 '.' 除外 和 '..'。这就是为什么不使用 -a 的原因。grep 不会得到任何误报,因为文件名中不允许使用“/”(至少对于 POSIX 文件系统)。
关于性能,在我的 Ubuntu Jaunty 安装中,在 /var/foo 中只有 32k 个文件和目录,find 是最快的,其次是 ls -d,最后是 ls -FA 和 grep。