1

我有一个目录“logs”,其中包含“A1”、“A2”、“A3”、“B1”、“B2”、“B3”等子目录。

我想编写一个 perl 代码来搜索名称模式为“A”的所有子目录,即所有从字符 A 开始的目录名称。

请帮我。

4

2 回答 2

2

使用 Perl 核心模块File::Find

use strict;
use warnings;
use File::Find;

#Find in 'logs' directory, assume the script is executed at this folder level

find(\&wanted, 'logs');

sub wanted { 
    #Subroutine called for every file / folder founded ($_ has the name of the current)
    if(-d and /^A/ ) {
       print $_, "\n"; 
    }
}

更新: 如果你想参数化前缀,你可以这样做:

use strict;
use warnings;
use File::Find;

my $prefix = 'B';

find(\&wanted, 'logs');
sub wanted { 
    if(-d and /^$prefix/ ) {
       print $_, "\n"; 
    }
}
于 2013-04-06T07:43:21.277 回答
0

File::Find简单地搜索目录是过大的。opendir/readdir还是有目的的!

该程序chdir对指定目录执行 a 操作,因此无需从readdir.

要搜索的目录和所需的前缀可以作为命令行参数传递logsA如果没有提供,则默认为。

use strict;  
use warnings;
use autodie;

my ($dir, $prefix) = @ARGV ? @ARGV : qw/ logs A /;
chdir $dir;

my @wanted = do {
  opendir(my $dh, '.');
  grep { -d and /^\Q$prefix/ } readdir $dh;
};

print "$_\n" for @wanted;
于 2013-04-06T15:50:47.557 回答