“ls”命令是否有任何选项可以让我只看到目录?

“ls”命令是否有任何选项可以让我只看到目录?

有时,我只需要检查目录而不是文件。 ls 命令有什么选项吗?或者这样做有什么用处吗?

编辑:我使用的是 Mac OS X,即使我有目录,它也会ls -d给我。.

答案1

我知道已经有一个选定的答案,但您可以通过以下方式获得所请求的行为ls

ls -ld -- */

(请注意,“--”标记参数的结尾,防止以连字符开头的文件夹名称被解释为进一步的命令选项。)

这将列出运行它的当前工作目录中的所有非隐藏目录(除非您配置 shell 的 glob 来展开它们)(请注意,它还包括指向目录的符号链接)。要获取其他文件夹的所有子目录,只需尝试:

ls -ld /path/to/directory/*/

请注意,-l 是可选的。

答案2

不,但是一个简单的find命令就可以做到这一点(这里使用-{min,max}depthGNU 扩展,这些天也可以在大多数实现中找到):

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 -ldprint -rC1( olumnprint r上的 aw 1 Cprint内置)。您可能还想添加Nglob 限定符,以便在没有匹配文件时不打印任何内容,而不是报告错误:

print -rC1 -- *(ND/)

相关内容