【转】用Perl读取一个目录下的所有文件名
原文链接:http://blog.waterlin.org/articles/using-perl-to-read-filename-under-a-directory.html
如果你想用Perl读取一个目录下的所有文件名,你应该怎么办呢?一般来讲,我喜欢用两种方法。
第一种方法,直接用readdir来读取目录句柄。
use warnings; use strict; my $dir = "./test"; my $file; my @dir; opendir (DIR, $dir) or die "can’t open the directory!"; @dir = readdir DIR; foreach $file (@dir) { if ( $file =~ /[a-z]*\.zip/) { print $file; } else { print “Not the kind of file type you want!\n”; } }
这段代码的含义就是:打开一个目录,读取所有的文件名,如果该文件名是以字母开头、并以.zip为后缀结尾的,则输出文件名称;否则,就输出提示消息。
当然,这段代码只会读取当前目录下的内容,并不会递归地寻找子目录下的内容。
第二种方法,直接用外部命令find。
在Unix Shell或是Cygwin里,有命令find可以直接读出目录下的文件名,而我们只要在Perl脚本里调用这个命令就可以了。
use warnings; use strict; my $dir = "./test"; my @file; my $filename; @file = `find $dir -type f`; foreach $filename (@file) { print $filename; }
上面的代码就直接调用外部命令find来进行查找与读取。这个时候,查找的结果,完全由你所调用的外部命令所控制。
两个方法都比较方便,第一种的移植性更强,推荐使用。