use strict; use warnings; use Digest::MD5; my $md5file = shift; my @files = @ARGV; die "Usage: addmd5 \n" if !defined $md5file or ! -e $md5file or !@files; # Read existing MD5 sums open (MD5FILE, '<', $md5file) or die "Couldn't open '$md5file'.\n"; my %md5files = map { chomp; substr($_, 34) => 1 } ; close (MD5FILE); # Append new MD5 sums open (MD5FILE, '>>', $md5file) or die "Couldn't open '$md5file' for appending.\n"; foreach my $file (@files) { next if exists $md5files{$file}; my $ctx = Digest::MD5->new; open (my $fh, '<', $file) or die "Couldn't open data file '$file'\n"; $ctx->addfile($fh); close ($fh); my $line = sprintf "%s %s\n", $ctx->hexdigest(), $file; print $line; print MD5FILE $line; } close (MD5FILE); __END__