用perl统计文件夹中文件个数,行数,文件大小,用作项目统计

本文介绍了一个使用Perl编写的脚本,该脚本能够遍历指定目录及其子目录下的所有文件,统计各种文件类型的数量及大小,并计算总的行数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#! /usr/bin/perl
#如果运行perlscript 必须要安装perl,不能用绿色的。
#perllib 环境变量加上d:/perl/lib
use warnings;

sub countFileLine;
sub get_dir;

$totallines = 0;
$totalfiles = 0;
$totaldirs = 0;

my %filecatagorycount;
my %filecatagorysize;

get_dir @ARGV;
print "所有文件总行数:".$totallines . "   " .$totallines/10000;print "万行/n";
print "所有文件总数:".$totalfiles;print "/n";
print "所有文件夹总数:".$totaldirs;print "/n";
# 打印每种类型文件个数
foreach(sort keys%filecatagorycount) #排序
{
    print "后缀名为【 $_ 】文件个数 => $filecatagorycount{$_}","   文件大小 => ",$filecatagorysize{$_}/1024/1024 ,"M","/n";
}
my @filter = qw(h cpp pro pri );
my $filtersize = 0;
foreach (@filter)
{
    print "/t".$_ . "/n";
    $filtersize+=$filecatagorysize{$_}/1024/1024;
    #print; #打印默认变量
}
print "通过[ @filter ] 过滤后总大小为  ".$filtersize,"M/n";

 

# 读取文件行数

open (FILE, $dataFile) or print "Can't open $dataFile: $!";
my @fileList = <FILE>;
close (FILE);
my $totalfile += ($#fileList + 1);

这种方法只能读取较小文件。


# 读取文件行数
sub countFileLine
{
    my $file = shift;
    my $count = 0;
    open (FH,"$file") or die "Can't open the file:$!/n";
    ++$count while (<FH>);    #####$count即为文件内容行数。如果每行长度一样的话,可以读取文件大小,然后除以每行的长度。
    close FH;
    my @lines = split(//./,$file);
    my $linescount = @lines;
    $filesize = -s $file;
    #print $file.$filesize ; print "/n";
    # 查处字符串长度
    $len = rindex $lines[$linescount-1]."/$", "/$";
    if($linescount > 1 && $len < 6)
    {
        $filecatagorycount{$lines[$linescount-1]}++;
        $filecatagorysize{$lines[$linescount -1]}+= $filesize;
    }
    else
    {
        $filecatagorycount{"NOEXT"}++;
        $filecatagorysize{"NOEXT"}+= $filesize;
    }
    
    #print @lines;print "/n";
    # print "$count lines in $file/n";
    $totallines += $count;
    $totalfiles++;
}

# 读取目录文件行
sub get_dir
{
    my $dir = shift;
    print "$dir/n";
    opendir (DIR,"$dir") or die "Can't open dir:$!";
    my @file = readdir(DIR);
    closedir(DIR);
    foreach (@file)
    {
        next if $_ eq '.' or $_ eq '..';
        my $file = "$dir/$_";
        if (-d $file)
        {
             get_dir($file);
        }
        else
        {
            countFileLine($file) if -T $file;
        }
    }
    $totaldirs++;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值