如何验证 perl 中给定文件扩展名存在多个文件
How to verify more than 1 file exist with a given file extension in perl
我的要求是知道一个目录中是否至少有 2 .wav
个文件。
目前我正在使用 grep(/\.wav$/,readdir($dir))
获取 .wav
个文件的数量,然后检查它是否 greater than 1
.
但如果有 1000s
个文件,我真的不想计算所有文件。
谁有更好的解决方案...
谢谢:)
在标量上下文中,您可以使用 while()
遍历目录项,并在满足条件时立即中断循环,
my $count = 0;
while (defined(my $f = readdir $dir)) {
if ($f =~ /\.wav$/ and ++$count >= 2) {
print "there are at least two wav files\n";
last;
}
}
您可以使用 glob
来扩展目录中带有通配符的文件列表,或者更好的是 bsd_glob
来自包 File::Glob
:
use File::Glob ':bsd_glob';
my @wavfiles = bsd_glob("$your_directory/*.wav");
my $count_wavs = @wavfiles;
请注意,文件计数在标量上下文中使用数组。
bsd_glob
更好,因为它可以正确处理目录名称中的空格(以及其他),更喜欢 glob
.
上的这个
我的要求是知道一个目录中是否至少有 2 .wav
个文件。
目前我正在使用 grep(/\.wav$/,readdir($dir))
获取 .wav
个文件的数量,然后检查它是否 greater than 1
.
但如果有 1000s
个文件,我真的不想计算所有文件。
谁有更好的解决方案...
谢谢:)
在标量上下文中,您可以使用 while()
遍历目录项,并在满足条件时立即中断循环,
my $count = 0;
while (defined(my $f = readdir $dir)) {
if ($f =~ /\.wav$/ and ++$count >= 2) {
print "there are at least two wav files\n";
last;
}
}
您可以使用 glob
来扩展目录中带有通配符的文件列表,或者更好的是 bsd_glob
来自包 File::Glob
:
use File::Glob ':bsd_glob';
my @wavfiles = bsd_glob("$your_directory/*.wav");
my $count_wavs = @wavfiles;
请注意,文件计数在标量上下文中使用数组。
bsd_glob
更好,因为它可以正确处理目录名称中的空格(以及其他),更喜欢 glob
.