PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Doppelte Files orten ?



schani
29-05-2006, 15:59
Hallo zusammen,

hat jemand von euch ein Shell Script mit dem man doppelte Files in auf dem System lokalisieren kann.
Das auch rücksicht auf größe oder Erstellungsdatum nimmt.

Zur zeit mache ich es einfach per find und geha die Liste per Hand durch. Aber die Datenmenge ist jetzt schon einfach zu viel.

Besten Dank für einen Tipp

Christian

403
29-05-2006, 17:18
Hallo zusammen,

hat jemand von euch ein Shell Script mit dem man doppelte Files in auf dem System lokalisieren kann.
Das auch rücksicht auf größe oder Erstellungsdatum nimmt.

Zur zeit mache ich es einfach per find und geha die Liste per Hand durch. Aber die Datenmenge ist jetzt schon einfach zu viel.

Besten Dank für einen Tipp

Christian


Wenn Du weisst wonach du suchst, kannst Du z.B.

locate unscharfer_filename| xargs ls -l |grep 'genauer_filename'
machen.

Naja, aber bei locate auf alle Faelle vorher
checken ob die Dateien auch da sind, falls mal die
locatedb veraltet ist.

sagi
29-05-2006, 23:54
Ich würde von allen Datein die md5 Summe berechnen lassen (da das sehr lange dauern würde, solltest du vielleicht nur die ersten xxxx Zeichen verwenden) und diese - mit dem Dateinamen - in einer Datei ablegen. Wenn diese Liste erst einmal sortiert ist, sollten sich Duplikate leicht finden lassen.

mfg
c.

Joghurt
30-05-2006, 13:22
find /start/pfad -type f -printf "%20s %p\n" | sort -n | uniq -w20 -D | cut -b22- | xargs -d '\n' md5sum | sort | uniq -w32 --all-repeated=separate
Was es macht:

Dateien mit Größe auflisten. Das Dateigrößenfeld ist 20 Zeichen lang
Liste numerisch sortieren -> gleiche Größen kommen zusammen
Felder mit gleicher Größe ausgeben (nur die ersten 20 Zeichen berücksichtigen, der Rest ist ja der Dateiname, der anders sein wird)
Die Größenangabe und das Leerzeichen (ersten 21 Zeichen) wegschneiden -> nur Dateinamen bleiben übrig
Über all diese potentiell identischen Dateien md5sum laufen lassen (als Trennzeichen für xargs newline nehmen)
Liste sortieren
Dateien mit gleicher md5 getrennt durch Leerzeile auflisten

(Wenn du die md5 nicht sehen willst, noch ein " | cut -b35- " anhängen)

Mehlwurm
30-05-2006, 15:11
wow ... klasse antwort, ich hätte ne stunde mindestens gerätzelt, bis ich ein halbsogutes script gebastelt hätte

Joghurt
30-05-2006, 17:35
Danke für die Blumen. Übung macht den Meister :)

Romanday
30-05-2006, 19:31
wow ... klasse antwort, ich hätte ne stunde mindestens gerätzelt, bis ich ein halbsogutes script gebastelt hätte

Wahrscheinlich länger.:D

schani
31-05-2006, 17:27
Das hört sich ja Klasse an,

ich habs gleich versucht und habe ein Problem mit den xargs.
Die Option -d kennt mein xargs nicht.

Mein xargs kann nur (suse 9.3) - xargs 4.1.7

xargs [-0prtx] [-e[eof-str]] [-i[replace-str]] [-l[max-lines]]
[-n max-args] [-s max-chars] [-P max-procs] [--null] [--eof[=eof-str]]
[--replace[=replace-str]] [--max-lines[=max-lines]] [--interactive]
[--max-chars=max-chars] [--verbose] [--exit] [--max-procs=max-procs]
[--max-args=max-args] [--no-run-if-empty] [--version] [--help]
[command [initial-arguments]]

finde aber nichts passendes das den weiteren Befehlt ausführt nach jeden \n

Könnt ihr mir da noch helfen

Christian

Joghurt
31-05-2006, 17:35
Dann wandle vorher noch \n in \0 um und nutze xargs' -0 option:

find /pfad -type f -printf "%20s %p\n" | sort -n | uniq -w20 -D | cut -b22- | tr '\n' '\0' | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate