仅列出UNIX中的目录

S'a*_*'am 214 unix shell

我想只列出指定路径中的目录(ls没有这样的选项).此外,这可以通过单行命令完成吗?

Dav*_*ock 309

尝试此ls -d */操作列出当前目录中的目录

  • 为什么用*/?? 请解释!? (42认同)
  • 嘿,这很漂亮,我总是习惯于我们 - ls -al | grep'^ d'` - 这更加简洁. (17认同)
  • 只要`echo*/`也会这样做 (17认同)
  • 我没有正确的解释,但是我确实知道`*/`只强制显示以正斜杠结尾的项目,在这种情况下它将是一个目录,即使`-F`选项为`不使用ls`.类似于`ls*php`的行为以及它如何在目录中显示以`php`结尾的所有文件. (6认同)
  • @ user975234有人问了一个类似的问题,发布了一个很好的解释[链接](http://superuser.com/questions/344877/ls-d-is-not-displaying-directories-is-there-a-way -to-GET-LS-到只显示二) (3认同)
  • 请注意,此解决方案依赖于通配符扩展,因此如果存在大量子目录,它可能会失败,并显示消息"参数列表太长".我更喜欢@ Robin的"单一责任"解决方案. (2认同)
  • 如果你使用`ls -d {.*,*} /`它还会列出你隐藏的虚线文件夹.如果那是你想要的. (2认同)

Rob*_*bin 93

试试这个:

find . -maxdepth 1 -type d
Run Code Online (Sandbox Code Playgroud)

  • 对我而言,这应该是它应该做的方式.与建议的`ls`解决方案不同,`find`完全负责完成工作(不依赖于shell通配符扩展,这可以施加限制).它也更简洁. (8认同)
  • 或者,如果您不想包含目录本身:`find*-maxdepth 0 -type d`. (2认同)

rad*_*iel 21

下列

find * -maxdepth 0 -type d
Run Code Online (Sandbox Code Playgroud)

基本上按条件过滤'*'的扩展,即当前目录中的所有条目-type d.

优点是,输出相同ls -1 *,但只有目录和条目不以点开头


ech*_*hox 13

你可以使用ls -d */tree -d

另一个解决方案是globbing,但这取决于你正在使用的shell以及是否支持globbing for directories.

例如ZSH:

zsh # ls *(/)
Run Code Online (Sandbox Code Playgroud)

  • 用什么样的Unix来获得`tree`? (3认同)

all*_*en1 10

由于有很多方法可以做到这一点,这是另一种方法:

tree -d -L 1 -i --noreport
Run Code Online (Sandbox Code Playgroud)
  • -d:目录
  • -L:树的深度(因此1,我们的工作目录)
  • -i:没有缩进,仅打印名称
  • --noreport:不在树列表末尾报告信息


小智 9

ls -l | grep '^d'
Run Code Online (Sandbox Code Playgroud)

您可以创建别名并将其放入配置文件中

alias ld="ls -l| grep '^d'"
Run Code Online (Sandbox Code Playgroud)

  • 使用此命令无法查看链接。链接可以是文件或目录。示例:lrwxrwxrwx 1 root root 21 avril 15 17:38 cron -> /lib/init/upstart-job. (2认同)

mda*_*mda 7

find . -maxdepth 1 -type d -name [^\.]\* | sed 's:^\./::'
Run Code Online (Sandbox Code Playgroud)


小智 6

用它来获取目录列表

ls -d */ | sed -e "s/\///g"
Run Code Online (Sandbox Code Playgroud)


kvi*_*vek 6

为了列出当前工作目录中的目录, ls -d */可以使用.如果需要列出隐藏目录,请使用此命令 ls -d .*/


Dom*_*omQ 5

find specifiedpath -type d

如果你不想在子目录中递归,你可以这样做:

find specifiedpath -type d -mindepth 1 -maxdepth 1

请注意,.也会列出“点”目录(名称以 开头);但不是特殊目录,.也不是... 如果你不想要“点”目录,你可以grep把它们拿出来:

find specifiedpath -type d -mindepth 1 -maxdepth 1 | grep -v '^\.'


Joh*_*web 5

答案取决于你的shell.

zsh,例如,你可以做到以下几点:

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

并且将显示当前工作目录中的所有目录.

有关man zshexpn更多信息,请参阅

另一种方法是使用find(1),它应该适用于大多数Unix风格:

find . -maxdepth 1 -type d -print  
Run Code Online (Sandbox Code Playgroud)

find(1)有很多用途,所以我肯定会推荐man find.


小智 5

长长的目录列表

ls -l | grep  '^d'  
Run Code Online (Sandbox Code Playgroud)

列出目录

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

  • 您有充分的理由重复现有的答案吗? (3认同)