我试图在指定的路径来获取所有目录的名称perl的遍历目录
我尝试以下,但,让我每级下调不只是在我指定的
find(\&dir_names, "C:\\mydata\\");
sub dir_names {
print "$File::Find::dir\n" if(-f $File::Find::dir,'/');
}
我试图在指定的路径来获取所有目录的名称perl的遍历目录
我尝试以下,但,让我每级下调不只是在我指定的
find(\&dir_names, "C:\\mydata\\");
sub dir_names {
print "$File::Find::dir\n" if(-f $File::Find::dir,'/');
}
my @dirs = grep { -d } glob 'C:\mydata\*';
非常感谢FMc,就像一个魅力!请你解释一下-d是什么,我知道grep和global,但是不能弄清楚{-d}做了什么。谢谢 –
@ParikshitTiwari它将glob的结果过滤为只是目录。它是许多文件测试运营商之一:请参阅http://perldoc.perl.org/functions/-X.html。 – FMc
使用opendir
代替
opendir DIR, $dirname or die "Couldn't open dir '$dirname': $!";
my @files = readdir(DIR);
closedir DIR;
#next processing...
编辑:
“这将给所有的文件,而不仅仅是目录。你仍然需要grep的“
是的,在这种情况下,你可以使用文件测试操作,看它是否是一个目录或不
在Windows中:。
$dirname="C:\\";
opendir(DIR, $dirname);
@files = readdir(DIR);
closedir DIR;
foreach $key (@files)
{
if(-d "$dirname\\$key")
{
print "$key\n";
}
}
glob
或readdir
可能会是我的选择太另一种方法是使用Windows dir
命令来完成这项工作。
my @dirs = qx(dir /AD /B);
chomp @dirs;
请参阅第2章文件系统从Automating System Administration with Perl。这为我们提供了:
sub ScanDirectory{
my ($workdir) = shift;
chdir($workdir) or die "Unable to enter dir $workdir:$!\n";
opendir(DIR, ".") or die "Unable to open $workdir:$!\n";
my @names = readdir(DIR) or die "Unable to read $workdir:$!\n";
closedir(DIR);
foreach my $name (@names){
next if ($name eq ".");
next if ($name eq "..");
if (-d $name){ # is this a directory?
#Whatever you want to do goes here.
}
}
}
“每层下来”听起来都像你在标题中所要求的:“遍历目录”。 – TLP