自己写了一个脚本,运行有问题,请大家帮忙看看

自己写了一个脚本,运行有问题,请大家帮忙看看

自己写了一个脚本,运行有问题,请大家帮忙看看
作用。统计一个目录下,所有文件行数的总和。如果目录中还有目录,则递归查询,知道查到所有文件。
#!/usr/local/bin/perl

use strict;
use vars qw/$count/;

$count = 0;
my $default_dir = $ENV{PWD};

my $dir = $ARGV[0] || $default_dir;
chomp $dir;

get_dir($dir);
print $count."\n";

sub get_file {
my $file = shift;
open (FH,"$file") or die "Can't open the file:$!\n";
count_file("*FH");
close FH;
}

sub get_dir {
my $dir = shift;
opendir (DIR,"$dir") or die "Can't open dir:$!";
my @file = readdir(DIR);
closedir(DIR);
foreach (@file){
if (-d $_){
get_dir($_);
}else{
get_file($_);
}
}
}

sub count_file {
my $FH = shift;
while (<FH>) {
next if /^\s+$/;
++$count;
}
}
请大家指正,我是新手。程序运行时,过一段时间显示:
Out of memory during request for 4084 bytes, total sbrk() is 536793088 bytes!
Out of memory during request for 2052 bytes, total sbrk() is 536795136 bytes!
查看top信息。发现交换分区全部用完。
非常感谢您的帮助!.
如果只要文件和目录一起?
如果只要文件和目录一起的话,就是这个 ls -Rl|grep ^[d-]|wc -l;
如果只是计算文件的话就是 ls -Rl|grep ^-|wc -l




   

很多情况下,shell的组合拳很猛的,根本不需要写脚本!
不信自己粘贴复制到命令行.
不信自己粘贴复制到命令行,看看是不是结果一样!当然windows除外

readdir()返回的数组中有(. ..)两个目录必须去掉
$dir = shift(@file);
$dir = shift(@file);

加两行代码就ok了