use Cwd; use Digest::SHA1 qw(sha1_base64); $intel = ".."; sub checksum { local $/; # slurp files open my $in, "<:raw", $_[0] or die "can't open $_[0]\n"; my $checksum = sha1_base64(<$in>); close $in; return $checksum; } sub dirLookup { my $d = $_[0]; opendir(my $dir, $d) or die "Couldn't open directory, $!"; print $d, "\n"; while (my $f = readdir $dir) { next if ($f eq '.' || $f eq '..' || $f eq "desktop.ini"); if (-d "$d/$f") { dirLookup("$d/$f"); next; } my $checksum = checksum("$d/$f"); $f = lc($f); my $file = $f; $file =~ /^([a-z0-9]*(?:\.[a-z0-9]{1,3})?)/; $lookup{$1,$checksum} .= "$d/$f:"; } closedir $dir; } sub indexAll { my $cwd = cwd(); chdir $intel; dirLookup("Intel80"); dirLookup("Intel86"); chdir $cwd; } indexAll(); open $out, ">__cache__" or die "can't create __cache__\n"; while (my ($key, $value) = each %lookup) { print $out "$key:$value\n"; } close $out;