【发布时间】:2015-08-01 05:25:06
【问题描述】:
我的要求是知道一个目录中是否至少有2个.wav文件。
目前我正在使用grep(/\.wav$/,readdir($dir))获取.wav文件的数量,然后检查它是否存在greater than 1。
但如果有1000s 个文件,我真的不想计算所有文件。
任何人都有更好的解决方案...
谢谢你:)
【问题讨论】:
标签: perl find file-exists
我的要求是知道一个目录中是否至少有2个.wav文件。
目前我正在使用grep(/\.wav$/,readdir($dir))获取.wav文件的数量,然后检查它是否存在greater than 1。
但如果有1000s 个文件,我真的不想计算所有文件。
任何人都有更好的解决方案...
谢谢你:)
【问题讨论】:
标签: perl find file-exists
在标量上下文中,您可以使用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 来扩展带有通配符的目录中的文件列表,或者更好的是来自包File::Glob 的bsd_glob:
use File::Glob ':bsd_glob';
my @wavfiles = bsd_glob("$your_directory/*.wav");
my $count_wavs = @wavfiles;
请注意,文件计数是在标量上下文中使用数组。
bsd_glob 更好,因为它可以正确处理目录名称中的空格(以及其他),在glob 上更喜欢这个。
【讨论】: