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

正如您在上面的输出中看到的,它还显示了隐藏目录。
使用 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

使用 echo 命令列出目录
不太可能的候选人? 你会惊讶地发现 Linux 中的 echo 命令也可以用于显示目录的内容。 尝试使用 echo *
自己看看。
与 ls 命令类似,您也可以使用 */
模式仅列出当前工作目录中的目录。
echo */
这是与您获得的输出相同的输出 ls -d
命令:

可能有更多方法可以仅列出目录,而不是文件。 事实上,这里讨论的方法可能有一些如果和但基于您正在寻找的内容。
如果您的目标只是显示目录,那么我讨论的大多数命令都可以使用。 如果您想要更具体的内容,例如仅使用斜线等获取目录名称,则必须自己进行一些格式化。
我希望这个 Linux 技巧对您有所帮助。 欢迎提出问题和建议。