2015-09-07 32 views
1

我想知道是否有找到存在于具有特殊类型的文件夹中的文件数量。例如,我有一个带有* .txt,* .doc和html扩展名的30个文件的文件夹。我想知道这个目录中的say html文件的数量。计算perl中特殊类型的目录中的文件数

更新:这里是我作为一个数字os文件在目录中。但我不知道如何使用​​3210。当然,而不是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."; 
+2

http://perldoc.perl.org/functions/glob.html –

+4

是的,有一种方法。 – melpomene

+2

显示你的尝试。 – Jens

回答

3

我发现了如何做到这一点不​​3210:

#!/usr/bin/perl 

use strict; 
use warnings; 
use Cwd; 

my $dir = getcwd; 
my $count = 0; 

opendir(my $dh, $dir) or die "$0: $dir: $!\n"; 
while (my $file = readdir($dh)) { 
    # We only want files 
    next unless (-f "$dir/$file"); 
    # Use a regular expression to find files ending in .txt 
    next unless ($file =~ m/\.html$/); 

    print "$file\n"; 
    $count = $count + 1; 
} 
closedir($dh); 
print "There are $count files in this directory."; 
exit 0; 

非常感谢您的意见!

+2

不错,但我建议使用词法变量而不是裸词目录句柄:'opendir(my $ dh,$ dir)或者死掉“$ 0:$ dir:$ !\ n“; ... readdir($ dh)' – melpomene

+1

如果您只想要当前目录,则不需要'getcwd';你可以打开“'。'”。 – melpomene

+0

@melpomene非常感谢您的建议。我使用了第一个建议。好想法! – Royeh

2

你在问题中遇到的问题是glob有点神奇。你可以这样做:

foreach my $file (glob ("*.txt")) { 
    print $file,"\n"; 
} 

while (my $file = glob ("*.txt")) { 
    print $file,"\n"; 
} 

无论你期待一个标量(单个值)返回水珠被检测 - 在这种情况下,它可以作为一个迭代器 - 或阵列(多标量) - 在这种情况下,它返回整个地段。

你可以把它做你想要的东西是这样的:

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. 
} 

如果你想牛逼o不要READDIR和过滤器,你也可以做这样的:

my @matches = grep { m/\.txt$/ } readdir ($dirh); 

例如(这不救你任何效率 - grep只是隐藏循环。这可能会使它更具可读性 - 这是一个有趣的问题)。

相关问题