用脚本只列出目录不是件容易事。这则攻略介绍了多种只列出目录的方法。
3.14.1 预备知识
有很多种方法可以只列出目录。dir类似于ls,但选项更少。另外也可以使用ls和find来列出目录。
3.14.2 实战演练
可以依据下列方法列出当前路径下的目录。
使用 ls -d
$ ls -d */
[root@dev workspace]# ls -d */golang/ tools/ vitest/[root@dev workspace]# ls -d.[root@dev workspace]# ls -d */golang/ tools/ vitest/[root@dev workspace]# pwd/root/workspace[root@dev workspace]#
使用 grep 结合 ls -F
$ ls -F | grep "/$"
[root@dev workspace]# pwd/root/workspace[root@dev workspace]# ls -F | grep "/$"golang/tools/vitest/
使用 grep 结合 ls -l
$ ls -l | grep "^d"
使用 find
$ find . -maxdepth 1 -type d -print../tools./golang./vitest
[root@dev workspace]# find . -maxdepth 1 -type d -print../tools./golang./vitest[root@dev workspace]#
3.14.3 工作原理
当使用ls的-F选项时,所有的输出项后面都会多出一个代表文件类型的字符,如@、*、|等。目录对应的是/字符。我们用grep只过滤那些行尾标记为/$的输出项。
ls –l输出的每一行的首字符表示文件类型。目录的文件类型字符是d。因此我们用grep过滤以d起始的行。^是行首标记。
使用find命令的时候可以指定-type的参数为d并将maxdepth设置成1,这是因为我们不需要继续向下搜索子目录。
