MD5 Prüfsummen ermitteln / dioppelte Dateien

ux2

ux2

Grendel Kleinbell
Hallo,

ich habe meherere Fileserver bzw. meherere Platten mit teils redundanten Daten.

jetzt geht es darum moeglichst effektiv doppelt vorhandene Dateien zu identifizieren und diese "nachzuverarbeiten" (loeschen, oder sonstwie bearbeiten)

Die Idee ist Per Script via MD5 die Prüfsummen zu erfassen und diese in einer Mysql-Datenbank zu vergleichen.

Eine weitere Möglichkeit sehe ich in der Feststellung auf geänderte Dateien. z.B. bei einem Webserver.

Hat sowas schonmal jmd gebaut ?

Gruss Michael
 
Mal kramen. Ich hab mal etwas geschrieben, dass bei doppelten Dateien eine behält, die anderen löscht und durch Links ersetzt.

Code:
#!/usr/bin/perl

use File::Find;
use strict;

open (OUTFILE, ">search_double.out");
$ARGV[0] && chdir($ARGV[0]) || die ("\nBitte korrektes Suchverzeichnis angeben:\n\n\t\t\t$0 <Suchverzeichnis>\n\n");
my %files;
my $savings = 0;
my %find_options = (wanted => \&compare_checksumme, no_chdir => 1);
find (\%find_options, '.');
$savings /= 1048576;
print "\n\n Ersparnis: $savings MB\n\n";
print OUTFILE "\n\n Ersparnis: $savings MB\n\n";
close OUTFILE;

#####################################################################
sub compare_checksumme {
   if((-f $_) && (-s $_) && !(-l $_)) {
      open (MD5SUM, "md5sum \'$_\' |");
      my ($md5sum) = split (/\s+/, <MD5SUM>, 0);
      close MD5SUM;
      if($files{$md5sum}) {
#           print "$files{$md5sum} <--- $_";
         print OUTFILE "$files{$md5sum} <--- $_";
         my $file_backup = $_ . ".bak";
         rename ($_, $file_backup);
         if(link ($files{$md5sum}, $_)) {
            unlink ($file_backup);
#               print ("\t\[success\]\n\n");
            print OUTFILE ("\t\[success\]\n\n");
            $savings += -s $_;
         } else {
            rename ($file_backup, $_);
#               print ("\[failure\]\n\n");
            print OUTFILE ("\[failure\]\n\n");
         }
      } else {
         $files{$md5sum} = $_;
      }
   }
}

Gruss, Xanti
 
Zurück
Oben