列出仅存在于给定目录中的文件?

时间:2013-08-16 07:35:26

标签: regex perl

我正在尝试列出仅在目录./a/b./a/d中的文件。现在我使用(-d && $_ =~ "b") || (-d && $_ =~ "d")明确指定。有什么办法可以把所需的文件夹放在一个数组中吗?

use File::Find;

my $filename = "h*.txt";
print ("Now it's:", $filename);

find({
  wanted => \&wanted,
  preprocess => \&dir_preprocess,
}, './a');

sub dir_preprocess {
    my (@entries) = @_; 

    #my @tmparr=("d","b"); This isn't working

    if ( $File::Find::dir eq './a' ) { 
        @entries = grep { (-d && $_ =~ "b") || (-d && $_ =~ "d")  }@entries;
    }   
    return @entries;
}

my @mylist;

sub wanted{
    if($_ =~ $filename) {
    push(@mylist, $_);
    }
}           

print ("It's:", @mylist);   

1 个答案:

答案 0 :(得分:2)

您可以在正则表达式中将|用作“或”。 (-d && $_ =~ /(b|d)/)将匹配b或d。您可以将名称放在数组中,然后使用join生成所需的正则表达式。

你可能想做一些事情,比如将路径添加到那个深度,否则你可能会进入层次结构的不同层次。此外,您可以在末尾添加$以表明它最后出现。