3.15 只列出目录的其他方法

尽管看起来只列出目录是一件挺简单的任务,很多人却未必能够办到。我经常会碰到这种情况,甚至有些编写shell脚本水平不错的用户也会被这个问题难住。这则攻略很值得学习,因为它介绍了多种只列出目录的方法与技巧。

3.15.1 预备知识

有很多种方法可以只列出目录。当你向其他人询问这些技术的时候,你得到的第一个答案可能是dir。但是,这是错的。dir命令只不过是另一个类似于ls且比ls选项更少的命令。让我们来看看如何只列出目录。

3.15.2 实战演练

有4种方法可以列出当前路径下的目录,分别列出如下。

  • $ ls -d */

只有上面这种结合 -d的用法才能够只打印出目录。

  • $ ls -F | grep "/$"

当使用 -F时,所有的输出项都会添加上一个代表文件类型的字符,如@*|等。对于目录项,添加的是 / 字符。我们用grep只过滤那些以 /$ 作为行尾标记的输出项。

  • $ ls -l | grep "^d"

ls -l输出的每一行的第一个字符表示文件类型。目录的文件类型字符是"d"。因此我们用grep过滤以"d"起始的行。^ 是行首标记。

  • $ find . -type d -maxdepth 1 -print

find命令可以指定type的参数为目录并将maxdepth设置成1,这是因为我们不需要向下搜索。