我想知道是否有任何方法可以找到特殊类型的文件夹中存在的文件数。例如,我有一个包含30个带* .txt,* .doc和html扩展名的文件的文件夹。我想知道在这个目录中说html文件的数量。
更新:以下是目录中的数字操作系统文件。但我不确定如何使用glob()
。当然,代替getcwd
可以给出另一个参数。
use Cwd;
my $dir = getcwd;
my $count = 0;
opendir (DIR, $dir) or die $!;
my @dir = readdir DIR;
my @file_list;
if (@file_list eq glob "*.pl"){
print "$item\n";
$count = $count + 1;
}
closedir DIR;
$count = $count - 2;
print "There are $count files in this directory.";
答案 0 :(得分:3)
我发现如何在没有select ownerId, Count(*)
from Apartment
group by ownerId, Count(*)
的情况下执行此操作:
glob()
非常感谢您的评论!!
答案 1 :(得分:2)
您在问题中遇到的问题是glob
有点神奇。你可以这样做:
foreach my $file ( glob ("*.txt") ) {
print $file,"\n";
}
和
while ( my $file = glob ("*.txt" )) {
print $file,"\n";
}
Glob正在检测你是否期望一个标量(单值)返回 - 在这种情况下它作为迭代器 - 或一个数组(多个标量) - 在这种情况下它返回整个批次。
你可以按照你想要的那样做:
my @stuff = glob ( "*.txt" );
print "There are: ", scalar @stuff," files matching the pattern\n";
print join ( "\n", @stuff );
请注意,readdir
的工作方式相同 - 您可以在列表上下文中完成整个操作,或者使用标量上下文一次一行:
opendir ( my $dirh, "some_directory");
my @stuff = readdir ( $dirh );
#etc.
或者
opendir ( my $dirh, "." ) or die $!;
while ( my $dir_entry = readdir ( $dirh ) ) {
#etc.
}
如果你想做readdir-and-filter,你也可以这样做:
my @matches = grep { m/\.txt$/ } readdir ( $dirh );
例如(这并没有为您节省任何效率 - grep
只是隐藏了循环。它可能使其更具可读性 - 这是一个品味问题。)