递归遍历某个目录,我的方法如下:
通过此程序,可以得到某个目录下除了.与..之外的所有文件的路径 罗列在标准输出(屏幕),若想输出到文件,只需将输出重定向即可。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#! /usr/bin/perl -w
print "please enter your directory:";
$dir=<STDIN>;
chomp ($dir);
&find_dir($dir);
sub find_dir()
{
my $base_dir=$_[0];
if(!opendir(DIR,"$base_dir"))
{
warn "open dir failed:$!\n";
}
my @father_dir=readdir(DIR);
closedir(DIR);
$base_dir =~ s/\/$//;
for $sub_dir (@father_dir)
{
if($sub_dir =~ /^\./)
{
next;
}
print "$base_dir/$sub_dir","\n";
if(-d "$base_dir/$sub_dir")
{
&find_dir("$base_dir/$sub_dir");
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
重定向到file:
#! /usr/bin/perl -w
print "please enter your directory:";
$dir=<STDIN>;
chomp ($dir);
if(!open OUTPUT,">file")
{
die " Open file failed:$!";
}
&find_dir($dir);
sub find_dir()
{
my $base_dir=$_[0];
if(!opendir(DIR,"$base_dir"))
{
warn "open dir failed:$!\n";
}
my @father_dir=readdir(DIR);
closedir(DIR);
$base_dir =~ s/\/$//;
for $sub_dir (@father_dir)
{
if($sub_dir =~ /^\./)
{
next;
}
print OUTPUT "$base_dir/$sub_dir","\n";
if(-d "$base_dir/$sub_dir")
{
&find_dir("$base_dir/$sub_dir");
}
}
}
close OUTPUT;
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~