Archiv verlassen und diese Seite im Standarddesign anzeigen : Doppelte Files orten ?
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
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.
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.
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
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
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
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.