如何`ls`只有一层深?

时间:2011-02-07 16:40:19

标签: bash ls

我有很多包含数据的子目录,我想要一个包含哪些作业(子目录)的简短列表。我对以下命令不满意。

$ ls H2*
H2a:
energy.dat overlap.dat 
norm.dat zdip.dat ...
(much more)
H2b:
energy.dat overlap.dat
norm.dat zdip.dat ... 
(much more)

这种不必要的混乱破坏了通配符的目的(限制输出)。如何将输出限制在一个深度?我想看看以下输出

H2a/ H2b/ H2z/

感谢您的帮助, 尼克

5 个答案:

答案 0 :(得分:36)

试试这个

ls -d H2*/

-d选项应该列出“仅限目录”,但本身只列出

.
我个人觉得有点奇怪。获取实际的目录列表需要使用通配符。

更新:正如@Philipp所指出的那样,你可以更简洁地做到这一点而不必留下bash说

echo H2*/

不同之处在于ls会在不同的行上打印这些项目,这对于管理其他功能通常很有用。

答案 1 :(得分:15)

你应该考虑使用find,比如

find . -type d -maxdepth 1 -name "H2*"

答案 2 :(得分:11)

echo H2*

进行扩展的是Bash,所以你甚至不需要ls

如果您同时拥有以H2开头的文件和目录,则可以附加斜杠以将glob限制为目录:

echo H2*/

答案 3 :(得分:3)

史蒂夫·贝克在http://mama.indstate.edu/users/ice/tree/使用tree 它填补了ls中缺少的许多东西。 列出一层深的目录:

tree -adi -L 1 H2*

答案 4 :(得分:2)

也许这就是你要找的东西?

ls | grep H2*