【问题标题】:How to verify more than 1 file exist with a given file extension in perl如何在perl中验证具有给定文件扩展名的多个文件
【发布时间】:2015-08-01 05:25:06
【问题描述】:

我的要求是知道一个目录中是否至少有2个.wav文件。

目前我正在使用grep(/\.wav$/,readdir($dir))获取.wav文件的数量,然后检查它是否存在greater than 1

但如果有1000s 个文件,我真的不想计算所有文件。

任何人都有更好的解决方案...

谢谢你:)

【问题讨论】:

    标签: perl find file-exists


    【解决方案1】:

    在标量上下文中,您可以使用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;
        }
    }
    

    【讨论】:

    • 谢谢 Сухой27。更好的解决方案:)
    【解决方案2】:

    您可以使用glob 来扩展带有通配符的目录中的文件列表,或者更好的是来自包File::Globbsd_glob

    use File::Glob ':bsd_glob';
    my @wavfiles = bsd_glob("$your_directory/*.wav");
    my $count_wavs = @wavfiles;
    

    请注意,文件计数是在标量上下文中使用数组。

    bsd_glob 更好,因为它可以正确处理目录名称中的空格(以及其他),在glob 上更喜欢这个。

    【讨论】:

    • 但它仍然计算所有文件。为什么要统计所有文件,看是否至少有2个文件。
    • 如果有许多具有请求扩展名的文件,通配符可能会很慢,否则会很快。与公认的解决方案相比,如果你的目录中包含 zz.wav 和 zzz.wav 等许多文件,那么函数可能会相当长。除了这一点,我觉得用起来还是很简单的。
    猜你喜欢
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-24
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2020-01-11
    • 2017-11-27
    相关资源
    最近更新 更多