用脚本只列出目录不是件容易事。这则攻略介绍了多种只列出目录的方法。

3.14.1 预备知识

有很多种方法可以只列出目录。dir类似于ls,但选项更少。另外也可以使用lsfind来列出目录。

3.14.2 实战演练

可以依据下列方法列出当前路径下的目录。

使用 ls -d

  1. $ ls -d */
  1. [root@dev workspace]# ls -d */
  2. golang/ tools/ vitest/
  3. [root@dev workspace]# ls -d
  4. .
  5. [root@dev workspace]# ls -d */
  6. golang/ tools/ vitest/
  7. [root@dev workspace]# pwd
  8. /root/workspace
  9. [root@dev workspace]#

使用 grep 结合 ls -F

  1. $ ls -F | grep "/$"
  1. [root@dev workspace]# pwd
  2. /root/workspace
  3. [root@dev workspace]# ls -F | grep "/$"
  4. golang/
  5. tools/
  6. vitest/

使用 grep 结合 ls -l

  1. $ ls -l | grep "^d"

image.png

使用 find

  1. $ find . -maxdepth 1 -type d -print
  2. .
  3. ./tools
  4. ./golang
  5. ./vitest
  1. [root@dev workspace]# find . -maxdepth 1 -type d -print
  2. .
  3. ./tools
  4. ./golang
  5. ./vitest
  6. [root@dev workspace]#

3.14.3 工作原理

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

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

使用find命令的时候可以指定-type的参数为d并将maxdepth设置成1,这是因为我们不需要继续向下搜索子目录。