如何`ls`只有一层深?

Nic*_*nce 26 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)
Run Code Online (Sandbox Code Playgroud)

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

H2a/ H2b/ H2z/
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助,尼克

har*_*rpo 37

试试这个

ls -d H2*/
Run Code Online (Sandbox Code Playgroud)

-d选项应该列出"仅限目录",但它本身只是列表

.
Run Code Online (Sandbox Code Playgroud)

我个人觉得有点奇怪.需要通配符才能获得实际的目录列表.

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

echo H2*/
Run Code Online (Sandbox Code Playgroud)

不同之处在于ls将在单独的行上打印项目,这通常用于管道到其他功能.

  • 如果mydir是目录的名称并执行'ls mydir',则ls显示mydir的内容.如果执行'ls -d mydir',则ls显示列表mydir而不显示其内容.现在,如果没有提供目录或通配符,则ls操作'.' (默认情况下是当前目录).所以'ls -d'相当于'ls -d.',它应该列出'.' 没有显示它的内容.我希望澄清一下为什么需要目录名或通配符. (3认同)

ajr*_*eal 15

你应该考虑使用find,比如

find . -type d -maxdepth 1 -name "H2*"
Run Code Online (Sandbox Code Playgroud)

  • 考虑在-type之前放置-maxdepth,你的命令可能会遇到警告.没关系,没什么大不了的. (3认同)

Phi*_*ipp 11

echo H2*
Run Code Online (Sandbox Code Playgroud)

这是扩展的Bash,所以你甚至不需要ls.

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

echo H2*/
Run Code Online (Sandbox Code Playgroud)