如何验证 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.

上的这个