File::Find::Duplicates - mehrfach vorhandene Dateien finden

| | Kommentare (0)

File::Find::Duplicates von Tony Bowden durchsucht Verzeichnisse nach mehrfach vorhandenen Dateien.

Vorgehensweise

Zunächst erstellt File::Find::Duplicates Listen von Dateien identischer Größe.

Nur für Dateien der selben Größe wird eine MD5 Prüfsumme erstellt.

Dateien gelten als identisch, wenn sowohl Größe als auch MD5-Prüfsumme übereinstimmen.

Diese Vorgehensweise erzielt eine hohe Geschwindigkeit und nimmt dafür eine sehr geringe Wahrscheinlichkeit für "False Positives" in Kauf.

Beispiel

Dieses einfache Beispielprogramm nimmt eine Liste von Verzeichnissen als Kommandozeilenargumente entgegen, durchsucht diese rekursiv und gibt die gefunden Duplikate (Name,Größe, MD5) aus.

find_duplicate_files liefert im Erfolgsfall eine Liste von Objekten zurück, welche die Methoden size(), md5() und files() zur Verfügung stellen.

Im Misserfolgsfall (keine Duplikate) wird eine leere Liste zurückgegeben.

#!/usr/bin/perl
use strict;
use warnings;

use File::Find::Duplicates;

my @dirs = @ARGV;

# Basic Sanity Check
usage() unless scalar @ARGV > 1;

my @dupesets = find_duplicate_files(@dirs);

foreach my $dupeset (@dupesets) {
	print "Duplicate files: ", join(", ", @{ $dupeset->files } ), "\n";
        print "MD5:  ", $dupeset->md5, "\n";
        print "Size: ", $dupeset->size, " Bytes\n";
	print "\n";
}

sub usage {
    warn "Usage: $0 DIR1 DIR2\n";
    exit;
}

Das Programm erzeugt z.B. folgende Ausgabe:

perl basic.pl . /tmp/
Duplicate files: ./basic.pl, /tmp/basic.pl
MD5:  9bc2302a67edcd34e3f3cd44f6d5284b
Size: 465 Bytes

Siehe auch

Jetzt kommentieren

Über diese Seite

Diese Seite enthält einen einen einzelnen Eintrag von Thomas Fahle vom 5.02.11 12:45.

Lesetipp: 17. Ausgabe des Perl-Magazins $foo erschienen ist der vorherige Eintrag in diesem Blog.

Potenzmengen berechnen mit List::PowerSet ist der nächste Eintrag in diesem Blog.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Fachzeitschriften

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.