用Perl实现linux命令tree的简化风格
时间:2010-08-03 来源:zhuyubei
今天被要求写文档,需要写出指定目录下的目录结构。开始想到用tree命令。但是由于要求不要显示名称满足指定格式的文件夹及其子文件夹,而我查了下tree的man,似乎发现只能过滤文件,不能过滤文件夹的。虽然我们可以通过grep来过滤掉那些满足模式的文件夹,但是其子文件夹不会被过滤掉。本来想直接修改tree的源码,但是想想c语言的文本处理复杂性,只好选择perl做个简单的tree.该程序只显示文件夹,对于满足一定正则表达式的文件夹,不显示该文件夹,及其下所有内容。
代码如下
#!/usr/bin/perl
my $filter = "^\\d{4}(\\.\\d\\d){5}\$";#过滤
#按照上下级文件夹格式,缩进显示文件
#递归读取该目录下的内容,子文件夹缩进显示增加 |
0--/home/zhu/Documents/
| 1--C
| | 2--tree-1.5.3
| | | 3--man
| 1--My Music
| 1--My Pictures
| 1--My Video
| 1--Mysql
| | 2--mysql_scripts
...(省略)
| | | | 4--driver
| | | | 4--error
| | | | 4--util
| | | 3--ch05
| | | | 4--fetchall_arrayref
| | | | 4--html
| | | | 4--prepare
| | | 3--ch06
| | | 3--ch08
| | 2--PerlExp
| | | 3--Getopt
| | | 3--IO
...
| | | | 4--man
| 1--shell
| | 2--csh
Directory Number: 126
不过我的perl代码和linux的tree相比,实在是差得远了,有时间要好好看下tree的实现,顺便在这里分析下.