如何在perl中验证具有给定文件扩展名的多个文件
Posted
技术标签:
【中文标题】如何在perl中验证具有给定文件扩展名的多个文件【英文标题】:How to verify more than 1 file exist with a given file extension in perl 【发布时间】:2015-08-01 05:25:06 【问题描述】:我的要求是知道一个目录中是否至少有2个.wav
文件。
目前我正在使用grep(/\.wav$/,readdir($dir))
获取.wav
文件的数量,然后检查它是否存在greater than 1
。
但如果有1000s
个文件,我真的不想计算所有文件。
任何人都有更好的解决方案...
谢谢你:)
【问题讨论】:
【参考方案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::Glob
的bsd_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 等许多文件,那么函数可能会相当长。除了这一点,我觉得用起来还是很简单的。以上是关于如何在perl中验证具有给定文件扩展名的多个文件的主要内容,如果未能解决你的问题,请参考以下文章