获取在Perl中具有类似命名模式的所有目录的名称
我有一个目录“logs”,其中包含子目录“A1”、“A2”、“A3”、“B1”、“B2”、“B3” 我想编写一个perl代码,搜索名称模式为“a”的所有子目录,即从字符a开始的所有目录名称 请帮助我。使用Perl核心模块: 更新: 如果要参数化前缀,可以执行以下操作:获取在Perl中具有类似命名模式的所有目录的名称,perl,unix,Perl,Unix,我有一个目录“logs”,其中包含子目录“A1”、“A2”、“A3”、“B1”、“B2”、“B3” 我想编写一个perl代码,搜索名称模式为“a”的所有子目录,即从字符a开始的所有目录名称 请帮助我。使用Perl核心模块: 更新: 如果要参数化前缀,可以执行以下操作: use strict; use warnings; use File::Find; my $prefix = 'B'; find(\&wanted, 'logs'); sub wanted { if(-d a
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
,因此无需从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;
它需要递归吗?@Barmar说的是子目录。我知道,但他需要找到子目录的子目录,以及子目录的子目录吗?@Barmer我只是想找到子目录。A1、A2、B1、B2等中没有其他子目录。。事实上,A1、A2、A3、B1、B2等都有很多文件。这确实有效。但我看到它变成了静态的。我们怎样才能使一个系统成为动态的。意味着我想用一个变量值来代替a。我们可以用if(-d和/^$val/)之类的东西吗{
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;