PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : per script dateien binär vergleichen und doppelte löschen



Matzetronic
20-01-2003, 05:58
hallo,

ich möchte in einem verzeichnis ein wenig aufräumen und doppelte dateien mittels binärvergleich finden (diff).

könnte mir jemand mal einen denkansatz dazu geben ? ich grübele schon ne weile, wie ich das am besten lösen könnte. da ich etwas umständlich bin, würde ich jeweils ein file umbewegen (ausschliessen, dass ich file xyz mit sich selbst vergleiche) und dann nacheinander mit allen dateien im verzeichnis vergleichen und bei übereinstimmung das file löschen.

bei mir würde das n riesenscript ergeben, vielleicht hat ja jemand ne einfachere lösung ?

mfg,
matze

ps.: bash bevorzugt :D

fork
20-01-2003, 18:29
Mal so'n paar Ansätze:

Erst würde ich mal Checksummen statt direkter Vergleiche nehmen.


# 1) Alle Checksummen aller Dateien finden
# 2) Das Ergebnis zwischenspeichern
# 3) Dateinamen entfernen
# 4) Checksummen sortieren
# 5) mehrfach vorkommende Checksummen wegschreiben
find $HOME -type f -exec md5sum {} \; | tee zwischen.txt | \
awk '{print $1}' | sort +0 | uniq -d >mehrfach.txt

# 6) Jetzt alle Dateinamen der Checksummenduplikate ausgeben lassen
grep -f mehrfach.txt zwischen.txt | sort +0

Vorsicht: Leere Dateien sind wohl keine Duplikate: => find Option -size +1c

P. S.: Das Skript hat in meinem homeverzeichnis(10.000 Dateien) schon sehr lange(Volle CPU-Last. Athlon XP 1200) gedauert(bis die Geduld zu Ende ging). Ein (SuSE-)Linux hat >150.000(Bin bei 190.000 ohne Daten) Dateien komplett. 1.000 (gefundene Duplikate) X 10.000 (Zeilen in Zwischenergebnisdatei) = 10.000.000 Suchvorgänge.

Es tut wohl not das ganze irgendwie einzugrenzen.

---

Wenn Du jede Datei mit jeder anderen Vergleichen willst: ( 150.000 ^ 2 ) / 2 = 11.250.075.000 DATEIvergleiche. :) Das reicht als Beschäftigung bis .... ?


Viel Spass beim weiterbasteln
Tobias

fork
20-01-2003, 19:01
Ich merke gerade das die Verwendung von fgrep das ganze von Schnecken- auf Lichtgeschwindigkeit steigert.

tobias@ax301:~> time nice -20 fgrep -f mehrfach.txt zwischen.txt | sort +0 | wc -l
3202

real 0m0.089s
user 0m0.070s
sys 0m0.020s
tobias@ax301:~>

Matzetronic
20-01-2003, 19:45
hi,

danke erstmal für den ansatz :)

aber md5sum ? ist das nicht wesentlich langsamer als diff ? naja, ich werds mal probieren nachher .....

mfg,
matze

ps.: das mit fgrep spart mir wohl einiges an cpu-zeit :cool:

Matzetronic
21-01-2003, 20:16
argh, das wird ja tage/wochen dauern :eek: