Henryk Plötz: Alle doppelten Dateien in einem verzeichnis löschen

Beitrag lesen

Moin,

Ich probiere ein PHP-Script zu schreiben, welches alle doppelten Dateien löscht.

Au fein, eine Programmiertechnikfrage.
Also ich denke eine der effizientesten Sachen wäre etwas in der Art von

Gehe alle Dateien durch
| Überlege dir für die aktuelle Datei irgendein eindeutiges Erkennungsmerkmal (md5(implode("",file($dateiname))) wäre so eins)
| schau in einem assoziativen Array nach, ob du das Erkennungsmerkmal schon mal gesehen hast (if($deinArray[$erkennungsmerkmal]))
| +-falls ja: lösche die Datei
| +-falls nein: merke dir das Erkennungsmerkmal in dem Array ($deinArray[$erkennungsmerkmal] = true;)

Nachdem die Schleife durchgelaufen ist, hast du von jeder Datei nur eine Kopie (die Benennung dieser Kopie ist nicht deterministisch).

PS: Statt eines assoziativen Arrays kannst du jede andere Struktur nehmen die einfache Überprüfungen, darauf ob ein Objekt in ihr drin ist, zulässt (binäre Bäume irgendwer?). Ich gehe aber mal davon aus dass die PHP-Leute das bei den Arrays schon ganz gut gemacht haben. Statt des implode()-Einzeilers zum Dateiauslesen solltest du vielleicht besser den fopen(); fread(,filesize()); fclose();-Dreizeiler nehmen, der müsste um einiges performanter sein.

--
Henryk Plötz
Grüße von der Ostsee