All pastes #214172 Raw Edit

Someone

public text v1 · immutable
#214172 ·published 2006-10-21 21:43 UTC
rendered paste body
#!/usr/local/bin/perl

use File::Walker;
use Digest::MD5  qw(md5 md5_hex md5_base64);
use DB_File;

dbmopen %HASH, "/home/jamesr/DATABASE", 0666 or die "can't open\n";

my $walker = File::Walker->new( { start => "/tmp/foo", skip => "dl0" } );
my $file;
my $linkcount, $count;
my $tSize;
$|=1;

while ( $file = $walker->step() ) {
  $count++;
  my $curdir = $walker->curdir();
  my $fullpath=$curdir . '/' . $file;
#  print "At $fullpath\n";
  if ( $file =~ /^[0-9]+\.$/ ) {
    open(FILE, $fullpath) or die "Can't open '$fullpath': $!";
    binmode(FILE);
    $sum=Digest::MD5->new->addfile(FILE)->hexdigest;
    if(exists $HASH{$sum}) {
      print "Start stat()\n";
      my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($fullpath);
      print "End stat()\n";
      if($nlink==1) {
        print "$fullpath can be relinked to $HASH{$sum}\n";
        $linkcount++;
        $tSize=$tSize+$size;
      }
    } else {
      print "Adding hash\n";
      $HASH{$sum} = $fullpath;
      print "Done adding hash\n";
    }
  }
  print "$count\r";
}
stats();
sub stats() {
  print "Stats:\n";
  print "\tTotal Files Seen: $count\n";
  print "\tTotal Files Relinked: $linkcount\n";
  print "\tTotal bytes saved: ~$tSize\n";
}



-- The truss
write(1, " A d d i n g   h a s h\n", 12)        = 12
    Incurred fault #5, FLTACCESS  %pc = 0xFEEA5BAC
      siginfo: SIGBUS BUS_ADRALN addr=0x00000009
    Received signal #10, SIGBUS [default]
      siginfo: SIGBUS BUS_ADRALN addr=0x00000009