#1 楼
我知道已经有一个选定的答案,但是您可以通过ls
来获得请求的行为:ls -ld -- */
(请注意,“-”表示参数的结尾,以防止将以连字符开头的文件夹名称解释为其他命令选项。)
这将列出当前工作目录中的所有非隐藏(除非您配置shell的glob来扩展它们)目录在哪里运行(请注意,它还包括指向目录的符号链接)。要获取其他文件夹的所有子目录,只需尝试:
ls -ld /path/to/directory/*/
请注意,-l是可选的。
评论
真好我从不认为目录的末尾有一个隐式的/,但是现在我看到您的回答是有意义的。毕竟,制表符补全总是添加它。
– gvkv
10-9-6'3:46
-d代表目录,-l代表长格式。 -的目的是什么?
–Dineshkumar
2015年4月17日15:03
尽管这看起来很短并且可以在大多数情况下使用,但是当需要一个真实目录而不是目录的符号链接时,可能不想使用这种方法。因此,在这种情况下,查找实际上是一个不错的选择。
– biocyberman
17年1月31日在20:59
当目录数超过最大参数长度时,find也具有优势。
–史蒂文·D
17年2月1日在9:31
向后工作,我只是意识到您可以忽略任何扩展名:ls -alhF --ignore = *。*。不知道这将如何处理“隐藏”文件夹,即.myHiddenFolder
–蒂玛
17年11月1日,0:46
#2 楼
否,但是可以使用简单的find
命令来完成:如有必要,可以为任一别名。评论
在Ubuntu 14.04上,它是-maxdepth 1.。find也想让我翻转一下命令:find。 -maxdepth 1 -d型
–布拉德·库皮(Brad Cupit)
15年8月28日在14:33
那ls -F | grep /解决方案效果奇妙!这似乎是我在FreeBSD机器上可以使用的唯一工具。我认为使用Fish意味着带有* /的任何内容可能都不起作用?
– cjm
16年7月27日在4:38
我从来没有和Fish一起工作过,所以我不确定,但是-F选项可以解决很多问题。
– gvkv
16年7月27日在13:21
#3 楼
我喜欢使用树实用程序来概述目录结构。在MacPorts和我尝试过的所有Linux发行版中都可以使用。#4 楼
我还需要查看隐藏的目录,因此已经修改了上面的建议以适合我的需求。 />评论
然后是ls -a以包含名称以点(。)开头的目录条目,这避免了match的麻烦。还有...
–nclark
20-2-3在14:50
#5 楼
使用zsh
(在macOS上默认发现,甚至在以前是/bin/sh
),您将使用glob限定符根据文件类型选择文件:非隐藏目录:ls -d -- *(/)
列出所有目录:
ls -d -- *(D/)
(
.
和..
始终被排除,如果需要,可以分别添加)。还包括指向目录的符号链接:使得在符号链接解析之后可以应用更多的限定符。)
#6 楼
像这样使用ls命令❯ ls -1d plugins/*/
plugins/localizable/
plugins/redmine_agile/
plugins/redmine_gitlab_hook/
plugins/redmine_mermaid_macro/
plugins/redmine_open_links_in_new_window/
#7 楼
$ ls -p | grep /
如果文件是目录,则
-p
标志将使ls
在每个文件名后添加一个斜杠(`/')。#8 楼
列出目录不仅有一种选择...但是您可以使用
-d
(列出目录本身,而不是其内容)和*/
来匹配目录本身:ls -d */
并尝试将点号用于隐藏的
ls -d .*/
。只是为了好玩,请尝试:
ls -d
和ls */
。差异将显而易见!Ref:
https://stackoverflow.com/a/14352330/12453339
https:// unix .stackexchange.com / a / 447829/385133
评论
请注意,已接受的答案基本上已经显示了这一点,以及-可以防止将以破折号开头的目录名称解释为选项。
– Kusalananda♦
20年1月2日,21:32
这是一个很好的链接。在那里设置了标签“ bash”。我只在man bash中找到“如果后跟/ ....”。在“路径名扩展”中,说明“ *”。
–user373503
20年1月3日,0:09
Kusalananda,请阅读Steven D答案的第一行...我的短些。我会说明选项和匹配项。感谢您的关注!
– marcio
20年1月3日,14:24
现在,第二个(SE)链接缺少“ bash”标签,并且patrick的回答很好地避免了解释。如果与上面的zsh解决方案进行比较,您会发现这是扩展模式匹配的外壳问题。 bash中的* /表示法在哪里定义?
–user373503
20年1月3日,17:12
我在上一条评论中的意思是,当当前目录中有一个名为-l的文件或目录时,接受的答案将不会开始表现出异常。
– Kusalananda♦
20年1月3日,17:20
#9 楼
我认为ls在Mac OS X上存在错误。一种解决方法是使用grep ...ls -l / | grep "^d"
评论
很高兴知道我不是唯一使用grep“ ^ d”骇客的人
– Michael Mrozek
10-9-6'2:10
据我所知,他描述的行为不是错误,如果使用的是GNU ls,则是相同的。 -d选项显示目录列表,而不显示目录。要了解为什么这很有用,请查看ls -l / home和ls -dl / home之间的区别
–史蒂文·D
10-9-6'2:11
克拉并不是贝壳特有的。您可以只使用ls -l / | grep ^ d。如果要使用引号,由于不需要参数扩展,因此请使其成为单引号。 ls -l / | grep'^ d'。是的,我是学徒。但是确实如此。 :)
–通配符
16年11月1日在1:08
#10 楼
最简单的方法是键入以下命令。这适用于大多数UNIX和Linux平台和版本。您可以根据需要跳过-F
,但这是在目录名末尾添加/的参数。 -C
参数仅捕获目录名称-所有这些名称都在当前目录中。如果只想在当前路径中看到目录和子目录,只需添加-R
参数(ls -CFR
)。 # ls -CF
/dir1 /dir2 /dir3 /beaches /Work /Other
评论
在我所知道的所有ls实现中,在ls的POSIX规范中,-C是按列输出,而不是跳过非目录文件。在您的示例中,/印在文件名之前,而ls实现不会这样做。使用-F,/会附加到目录文件的文件名中。
–StéphaneChazelas
18年6月21日在16:15
当我看到这个答案时,我想知道“这是真的吗?” @StéphaneChazelas和Jeff Schaller-您是否否决公然的错误答案?
– G-Man说“恢复莫妮卡”
19年2月21日,下午3:51
#11 楼
ls -G
这将以蓝色显示您的目录
评论
使用此命令时仅看到目录吗?
–don_crissti
16 Nov 1'0:55
评论
有人可以解释为什么ls -d只给出。以及为什么必须在末尾添加* /才能使其起作用?@cwd如果未指定任何文件,则ls默认为.。-d表示不打印目录的内容,请打印目录本身。
@cwd尝试使用ls -p在目录名称后显示/。所以* /只是一个与目录名和/组合匹配的模式。
我为〜/ .bash_aliases文件创建了一个实现@Steven_D答案的函数:gist.github.com/rjurney/998f4951a57bfa5daeb9a6c18f6f4827