Ich habe einen Ordner mit einer großen Anzahl von Dateien, von denen einige genau denselben Inhalt haben. Ich möchte Dateien mit doppeltem Inhalt entfernen. Wenn zwei oder mehr Dateien mit doppeltem Inhalt gefunden werden, möchte ich eine dieser Dateien zurücklassen und die anderen löschen.
Folgendes habe ich mir ausgedacht, aber ich weiß nicht, ob es funktioniert :), habe es noch nicht probiert.
Wie würdest du das machen? Perl oder allgemeiner Algorithmus.
%Vor%Perl, mit Digest :: MD5-Modul.
%Vor%Wenn Perl kein Muss ist und Sie an * nix arbeiten, können Sie Shell-Tools verwenden
%Vor%Hier ist ein allgemeiner Algorithmus (der jetzt aus Effizienzgründen editiert wurde - und ich habe auch einen Fehler behoben, den niemand gemeldet hat):)
Es wird ewig dauern (ganz zu schweigen von viel Speicher), wenn ich den Inhalt jeder einzelnen Datei mit jedem anderen vergleichen werde. Warum wenden wir nicht die gleiche Suche zuerst auf ihre Größe an und vergleichen dann die Prüfsummen für die Dateien gleicher Größe.
Also wenn wir
Jetzt müssen wir nur die potentiellen Duplikate herausziehen und prüfen, ob sie identisch sind (indem wir für jede eine Prüfsumme erstellen, indem wir Digest :: MD5 ), mit der gleichen Hash-Technik:
%Vor%-Fini
Variationen über ein Thema:
%Vor%Es ist nicht nötig, eine Liste zu führen, nur um sie aus der Liste zu entfernen und den Rest zu löschen; Behalte einfach das, was du vorher gesehen hast, und entferne alle Dateien, die einer bereits gesehenen Summe entsprechen. Die 2-Limit-Aufteilung soll das Richtige mit Dateinamen machen, die Leerzeichen enthalten.
Wenn Sie dem nicht trauen, ändern Sie einfach das Wort unlink
in print
und es wird eine Liste der zu entfernenden Dateien ausgegeben. Sie können diese Ausgabe sogar in eine Datei umwandeln und dann am Ende rm $(cat to-delete.txt)
, wenn es gut aussieht.
Ich würde empfehlen, dass Sie es in Perl machen und File :: Find verwenden, während Sie es sind daran.
Wer weiß, was Sie tun, um Ihre Dateiliste zu erstellen, aber Sie können es mit Ihrer Dublettenprüfung kombinieren.
Hier ist eine Möglichkeit, zuerst nach Größe und dann nach md5
checksum zu filtern:
Vielleicht möchten Sie einen Blick darauf werfen, wie ich doppelte Dateien gefunden und entfernt habe. Obwohl Sie es an Ihre Bedürfnisse anpassen müssen.
Tags und Links perl