我正在尝试获取指定路径中所有目录的名称
我尝试了下面的内容,但这不仅仅是在我指定的路径
下来的每个级别find(\&dir_names, "C:\\mydata\\");
sub dir_names {
print "$File::Find::dir\n" if(-f $File::Find::dir,'/');
}
答案 0 :(得分:17)
my @dirs = grep { -d } glob 'C:\mydata\*';
答案 1 :(得分:6)
使用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";
}
}
答案 2 :(得分:1)
请参阅Automating System Administration with Perl中的第2章文件系统。这为我们提供了这个:
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.
}
}
}
答案 3 :(得分:0)
glob
或readdir
也可能是我的选择。另一种方法是使用windows dir
命令来完成这项工作:
my @dirs = qx(dir /AD /B);
chomp @dirs;