使用 ls 和其他命令仅列出 Linux 中的目录使用 ls 和其他命令仅列出 Linux 中的目录使用 ls 和其他命令仅列出 Linux 中的目录使用 ls 和其他命令仅列出 Linux 中的目录
  • 业务
  • 目标
  • 支持
  • 关于
  • 联系我们
  • 登录
✕

使用 ls 和其他命令仅列出 Linux 中的目录

发表 admin at 2025年2月28日
类别
未分类
标签

列出目录的内容很容易。但是,如果您只想列出目录,而不列出文件和链接怎么办?

Linux 中的 ls 命令用于列出任意目录的内容。

默认情况下,它列出所有内容,无论是文件、目录、链接还是命名管道。

但是如果您只想列出目录怎么办?你是怎样做的?

与 Linux 中的任何事物一样,有多种方法可以完成同一任务。仅列出目录没有什么不同:

  • ls -d */

  • ls -l | grep '^d'

  • 寻找 。 -最大深度 1 -类型 d

  • 回声*/

  • 树-d-L 1

不用担心。我会详细解释事情。这是我将在此处的示例中使用的目录的内容:

使用 ls 命令仅列出目录

使用熟悉的 ls 命令来执行此操作总是好的,因为这是用于显示目录内容的命令。

要仅列出子目录,请在 ls 命令中使用 -d 选项,如下所示:

ls -d */

这是它显示的输出:

[abhishek@localhost Documents]$ ls -d */
another_dir/  my_dir/

为什么是*/?因为没有它,ls -d 将仅返回目录名称。 -d 选项列出目录而不是其内容(包括文件、目录等)。

*/ 是一种模式。使用 * 列出所有内容(包括子目录的内容),而 / 将模式限制为目录。

这张图很好地描述了这种差异。

您可以将其与长列表选项 -l 和大多数其他选项结合使用:

[abhishek@localhost Documents]$ ls -ld */
drwxrwxr-x. 1 abhishek abhishek 16 Nov  7 18:22 another_dir/
drwxrwxr-x. 1 abhishek abhishek 44 Nov  7 18:22 my_dir/

如果您不希望目录名称末尾有尾部斜杠(/),可以使用 cut 命令将其剪切掉:

[abhishek@localhost Documents]$ ls -ld */ | cut -f1 -d'/'
drwxrwxr-x. 1 abhishek abhishek 16 Nov  7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov  7 18:22 my_dir

仅列出特定目录中的子目录

上面的命令在当前目录下运行。如果不在同一个目录下怎么办?

在这种情况下,您可以在目录路径末尾使用 */ 和 ls -d:

ls -d Path/To/Dir/*/

下面是我移出 Documents 目录,然后仅列出 Documents 目录内的目录的示例:

[abhishek@localhost ~]$ ls -ld Documents/*/
drwxrwxr-x. 1 abhishek abhishek 16 Nov  7 18:22 Documents/another_dir/
drwxrwxr-x. 1 abhishek abhishek 44 Nov  7 18:22 Documents/my_dir/

您是否注意到它没有列出隐藏目录?这是该方法的一个缺点。您可以使用 ls -d .*/ 来显示隐藏目录,但它仅显示隐藏目录。

结合使用 ls 和 grep 命令

您始终可以依靠古老的 grep 命令来过滤特定内容的输出。

如果列出的内容很长,您可以识别目录,因为以 d 开头。

可以使用grep来过滤以d开头的内容:

ls -l | grep '^d'

但这为您提供了比目录名称更多的字段:

[abhishek@localhost Documents]$ ls -l | grep '^d'
drwxrwxr-x. 1 abhishek abhishek 16 Nov  7 18:22 another_dir
drwxrwxr-x. 1 abhishek abhishek 44 Nov  7 18:22 my_dir

使用 find 命令仅列出目录

以下是如何使用 find 命令仅列出子目录:

find directory_path -maxdepth 1 -type d

我希望您熟悉 find 命令。尽管如此,我还是会解释一下。

使用type d,您可以要求 find 命令仅查找目录。

使用 maxdepth 1,您可以要求 find 命令仅将搜索保持在当前级别(而不进入子目录内部)。

[abhishek@localhost Documents]$ find . -maxdepth 1 -type d
.
./my_dir
./another_dir
./.my_hidden_dir

正如您在上面的输出中看到的,它还显示了隐藏目录。

使用tree命令仅列出目录

如果您的目标是仅列出目录,您也可以使用 tree 命令。

默认情况下,tree 命令为您提供完整的目录结构。您可以将其修改为仅显示目录并且仅显示当前级别。

tree -dai -L 1
  • d - 仅查找目录

  • a - 查找隐藏文件和目录

  • i - 从显示中删除树结构

  • L 1 - 不要进入子目录

这是输出:

abhishek@localhost Documents]$ tree -dai -L 1
.
another_dir
my_dir
.my_hidden_dir

3 directories

使用 echo 命令列出目录

最不可能的候选人?您会惊讶地发现 Linux 中的 echo 命令也可以用于显示目录的内容。尝试使用 echo * 并亲自查看。

与 ls 命令类似,您也可以使用 */ 模式仅列出当前工作目录中的目录。

echo */

以下输出与使用 ls -d 命令得到的输出相同:

可能有更多方法仅列出目录而不列出文件。事实上,根据您要寻找的内容,这里讨论的方法可能有一些假设和但是。

如果您的目标只是显示目录,那么我讨论的大多数命令都可以工作。如果您想要更具体的内容,例如仅获取带斜杠的目录名称等,则必须自行进行一些格式化。

我希望这篇 Linux 技巧对您有所帮助。随时欢迎提出问题和建议。

©2015-2025 Norria support@norria.com