如何在 Linux 中仅列出目录

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

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

但是如果你只想列出目录呢? 你是怎么做到的?

就像 Linux 中的任何东西一样,有几种方法可以完成相同的任务。 仅列出目录没有什么不同:

  • ls -d */
  • ls -l | grep ‘^d’
  • 寻找 。 -maxdepth 1 -类型 d
  • 回声 */
  • 树 -d -L 1

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

使用 ls 命令仅列出目录

使用熟悉的 ls 命令总是好的,因为这是用于显示目录内容的命令。

仅列出 子目录, 使用 -d ls 命令的选项如下:

ls -d */

这是它显示的输出:

[[email protected] Documents]$ ls -d */
another_dir/  my_dir/

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

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

这张照片很好地描绘了这种差异。

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

[[email protected] 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 命令将其删除:

[[email protected] 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/*/

这是一个 example 我移出 Documents 目录,然后仅列出 Documents 目录中的目录:

[a[email protected] ~]$ 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'

但这为您提供了更多的字段,而不仅仅是目录名称:

[[email protected] 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 命令仅将搜索保持在当前级别(而不是进入子目录)。

[[email protected] Documents]$ find . -maxdepth 1 -type d
.
./my_dir
./another_dir
./.my_hidden_dir
在 Linux 中仅使用 find 命令列出子目录

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

使用 tree 命令仅列出目录

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

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

tree -dai -L 1
  • d – 仅查找目录
  • a – 寻找隐藏的文件和目录
  • i – 从显示中删除树结构
  • L 1 – 不要进入子目录

这是输出:

[email protected] Documents]$ tree -dai -L 1
.
another_dir
my_dir
.my_hidden_dir

3 directories
在 Linux 中使用 tree 命令仅列出子目录

使用 echo 命令列出目录

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

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

echo */

这是与您获得的输出相同的输出 ls -d 命令:

仅在 Linux 命令行中使用 echo 命令列出目录

可能有更多方法可以仅列出目录,而不是文件。 事实上,这里讨论的方法可能有一些如果和但基于您正在寻找的内容。

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

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