perl遍历目录

use*_*986 8 perl

我正在尝试获取指定路径中所有目录的名称

我尝试了以下但是这给了我每个级别而不仅仅是我指定的路径

find(\&dir_names, "C:\\mydata\\");
sub dir_names {
    print "$File::Find::dir\n" if(-f $File::Find::dir,'/');
}
Run Code Online (Sandbox Code Playgroud)

FMc*_*FMc 17

my @dirs = grep { -d } glob 'C:\mydata\*';
Run Code Online (Sandbox Code Playgroud)

  • @ParikshitTiwari它将glob的结果过滤到只是目录.它是许多文件测试运算符之一:请参阅http://perldoc.perl.org/functions/-X.html. (4认同)

Rah*_*hul 6

opendir改用

opendir DIR, $dirname or die "Couldn't open dir '$dirname': $!";
my @files = readdir(DIR); 
closedir DIR; 
#next processing... 
Run Code Online (Sandbox Code Playgroud)

编辑:

"这将提供所有文件,而不仅仅是目录.你还需要grep."

是的,在这种情况下,您可以使用文件测试运算符来查看它是否是目录.

在Windows中:

$dirname="C:\\";
opendir(DIR, $dirname);
@files = readdir(DIR);
closedir DIR;
foreach $key (@files)
 {
  if(-d "$dirname\\$key")
   {
     print "$key\n";
   }
 } 
Run Code Online (Sandbox Code Playgroud)