有时,我只需要检查目录而不是文件。 ls 命令有什么选项吗?或者这样做有什么用处吗?
编辑:我使用的是 Mac OS X,即使我有目录,它也会ls -d
给我。.
答案1
我知道已经有一个选定的答案,但您可以通过以下方式获得所请求的行为ls
:
ls -ld -- */
(请注意,“--”标记参数的结尾,防止以连字符开头的文件夹名称被解释为进一步的命令选项。)
这将列出运行它的当前工作目录中的所有非隐藏目录(除非您配置 shell 的 glob 来展开它们)(请注意,它还包括指向目录的符号链接)。要获取其他文件夹的所有子目录,只需尝试:
ls -ld /path/to/directory/*/
请注意,-l 是可选的。
答案2
不,但是一个简单的find
命令就可以做到这一点(这里使用-{min,max}depth
GNU 扩展,这些天也可以在大多数实现中找到):
find . -mindepth 1 -maxdepth 1 -type d
或者 POSIX(标准)等效项:
find . ! -name . -prune -type d
关于 FreeBSD 及其一些衍生产品(包括苹果系统),你还可以这样做:
find . -depth 1 -prune -type d
这些还包括隐藏目录(不是.
或..
特殊目录)并且不对文件列表进行排序。它还./
为每个文件添加了一个前缀,通过 GNU 实现find
,您可以通过添加-printf '%P\n'
.
或grep
(假设文件名不包含换行符):
ls -p | grep /
(添加-A
选项以ls
包含隐藏的选项)。
如果需要的话,您可以为其中一个添加别名。
答案3
我还需要查看隐藏目录,因此修改了上面的建议以满足我的需求
ls -d -- */ .*/
(根据外壳,可能还包括.
和..
)
答案4
使用zsh
(在 macOS 上默认找到它,它甚至曾经/bin/sh
在那里,并且它是较新版本中的默认登录 shell),您可以使用 glob 限定符根据文件类型选择文件:
列出非隐藏目录:
ls -ld -- *(/)
列出所有目录:
ls -ld -- *(D/)
(
.
和..
总是被排除在外,如果需要的话可以单独添加)还包括目录的符号链接:
ls -ld -- *(D-/)
(
-
使得在符号链接解析后应用进一步的限定符)。
在这里,使用-l
以获得长列表。要打印匹配文件的列表,您不需要ls
,您可以替换ls -ld
为print -rC1
( olumnprint
r
上的 aw 1
C
,print
内置)。您可能还想添加N
glob 限定符,以便在没有匹配文件时不打印任何内容,而不是报告错误:
print -rC1 -- *(ND/)