我有一个目录“logs”,其中包含“A1”、“A2”、“A3”、“B1”、“B2”、“B3”等子目录。
我想编写一个 perl 代码来搜索名称模式为“A”的所有子目录,即所有从字符 A 开始的目录名称。
请帮我。
使用 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";
}
}
File::Find
简单地搜索目录是过大的。opendir
/readdir
还是有目的的!
该程序chdir
对指定目录执行 a 操作,因此无需从readdir
.
要搜索的目录和所需的前缀可以作为命令行参数传递logs
,A
如果没有提供,则默认为。
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;