用perl统计文件夹中文件个数,行数,文件大小,用作项目统计
2011-04-19 19:26
881 查看
#! /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++;
}
#如果运行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++;
}
相关文章推荐
- 利用正则表达式统计某个某个文件夹下所有java文件的 空格行数、注释行数、和代码行数
- Atitit.Guibutton与面板---项目规模的评估----文件数统计,结构,代码行数,每类型文件行数.
- 【linux】统计文件夹中文件行数
- nodejs实现遍历文件夹并统计文件大小
- [2017.02.13] linux平台下统计C++项目文件个数和代码行数
- 关于项目中文件和行数统计
- 求批处理统计文件夹内的所有文件的数量和总大小
- JavaIO统计一个文件夹,文件,文件夹,所有字节的大小
- 统计文件夹内.c .cpp .py类型文件的代码行数
- Linux 下C编程实现文件夹下文件大小和二级文件夹大小统计
- Linux:centos释放缓存,查看磁盘空间大小,xxx文件夹, 查看文件夹大小,查看剩余内存,查看xxx软件位置,统计某文件夹,统计某文件夹下目录数量,查看文件夹大小,给文件夹下所有的文件赋值权限
- java统计指定文件的大小以及包含的文件夹和文件数
- 利用Foundation框架写的小程序统计文件(文件夹内文件)的所有行数(或统计字数)
- java/android 统计文件夹大小及删除文件夹下所有文件和路径
- 统计指定文件夹下指定文件类型的行数(java实现)
- linux下统计当前文件夹中文件的数目以及如何查看文件夹的大小
- php统计文件夹所有文件 及 容量大小
- Atitit.Gui按钮与面板---项目规模的评估----文件数统计,结构,代码行数,每类型文件行数.
- java/android 统计文件夹大小及删除文件夹下所有文件和路径
- nodejs:遍历文件夹文件统计文件大小