Anzeige:
Ergebnis 1 bis 5 von 5

Thema: per script dateien binär vergleichen und doppelte löschen

  1. #1
    Registrierter Benutzer
    Registriert seit
    04.05.2001
    Ort
    Köthen
    Beiträge
    33

    per script dateien binär vergleichen und doppelte löschen

    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

  2. #2
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    Mal so'n paar Ansätze:

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

    Code:
    # 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
    Geändert von fork (20-01-2003 um 18:58 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    30.12.2001
    Beiträge
    444
    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:~>

  4. #4
    Registrierter Benutzer
    Registriert seit
    04.05.2001
    Ort
    Köthen
    Beiträge
    33
    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

  5. #5
    Registrierter Benutzer
    Registriert seit
    04.05.2001
    Ort
    Köthen
    Beiträge
    33
    argh, das wird ja tage/wochen dauern

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •