zzss 发表于 2018-8-30 12:48:35

perl 实现du目录的脚本

#!/usr/bin/perl -w  
use strict;
  

  
sub dir_walk {
  

  
      my ($top,$filefunc,$dirfunc) = @_;
  
      my $DIR;
  
      if (-d $top){
  
                my $file;
  
                unless (opendir $DIR,$top){
  
                        warn "Coun't open the $top:$!;skipping.\n";
  
                        return;
  
                }
  
                my @results;
  
                while ( $file = readdir $DIR){
  
                        next if $file eq '.' || $file eq '..';
  

  
                        #递归统计文件的大小
  
                        push @results,dir_walk("$top/$file",$filefunc,$dirfunc);
  
                        #print "$top/$file @results\n";
  

  
                }
  
                #解dir_size引用
  
                return $dirfunc->($top,@results);
  

  
      }else {
  
                #解file_size的引用
  
                return $filefunc->($top);
  
      }
  

  
}
  

  
sub file_size { -s $_ };
  

  
sub dir_size {
  
      my $dir = shift;
  
      my $total = -s $dir;
  
      my $n;
  
      for $n (@_){$total += $n }   #统计results的值和目录值
  
      printf "%6d %s\n",$total,$dir; #打印每次循环的目录的大小和目录名
  
      return $total;
  
}
  

  

  
my $total_size = dir_walk('/downloads/php/serv',\&file_size,\&dir_size);
  
print "$total_size \n";


页: [1]
查看完整版本: perl 实现du目录的脚本