Hallo PC-Kenner, über die Jahre haben sich bei manuellen Backups von verschiedenen Rechnern viele Duplikate angesammelt. Z.B. kam es auch schon vor, dass ein früheres Backup noch einmal vollständig als Kopie in einem späteren Backup auftauchte. Oder ein Backup enthält alle Fotos bis 2013, ein anderes Backup alle diese Fotos und zusätzlich alle Fotos bis Feb. 2016. Wer wie ich ohne richtige Backuplösung einfach gelegentlich alle wichtigen Dateien auf eine zweite Platte kopiert, kennt wahrscheinlich das Problem. Meine Frage: gibt es eine Software, die dabei hilft, Duplikate zu finden, dabei auch ganze Ordner zu erkennen, die vollständig woanders noch einmal vorhanden sind (oder mit minimalen Änderungen, falls z.B. mal ein Bild geöffnet wurde, und um 90° rotiert wieder gespeichert.)? Das ganze sollte übersichtlich dargestellt werden, z.B. "/backup/20131220 ist zu 85% identisch mit /backup/20160229/backups/komplett/20131220 /backup/20131220/Photos ist zu 99.8% identisch mit /backup/20160229/backups/Bilder/20131220/Photos..." Es reicht nicht, einfach Duplikate durch Links zu ersetzen oder zu löschen, da ich manuell wieder eine sinnvolle Struktur herstellen möchte und nicht dieselben Dateien an vielen Orten finden möchte, wenn auch als Links. Eine Lösung für Linux wäre praktisch, Windows geht zur Not aber auch. Jan
1 | path=. |
2 | |
3 | find "$path" -type f -exec md5sum {} \; > /tmp/md5_files |
4 | |
5 | grep -o '^[^ ]*' /tmp/md5_files | sort | uniq -d | |
6 | while IFS='' read hash |
7 | do grep ^$hash /tmp/md5_files | sed 's/^[^ ]* *//' |
8 | done |
:
Bearbeitet durch User
http://cpansearch.perl.org/src/ANDK/Perl-Repository-APC-2.002/eg/trimtrees.pl Dieses Perl Script sucht nach Identischen Dateien(mithilfe von Checksummen) und ersetzt sie durch Hard-Links Zu einer dieser Dateien. Oder falls es auf deiner Linux-Distri verfügbar ist, nimm rdfind: https://rdfind.pauldreik.se/ .Alternativ könntest du auch nen Deduplizierendes Dateisystem benutzen(z.b. ZFS oder Lessfs).
Der Total Commander macht so etwas ganz gut. Ordner synchronisieren, Duplikate finden, etc.
Daniel A. schrieb: > path=. > > find "$path" -type f -exec md5sum {} \; > /tmp/md5_files > > grep -o '^[^ ]*' /tmp/md5_files | sort | uniq -d | > while IFS='' read hash > do grep ^$hash /tmp/md5_files | sed 's/^[^ ]* *//' > done Da bekommst Du eine Liste von Dateien, aber ohne die Info welche davon untereinander gleich sind. Einfacher ist es so: find . -type f -exec sha256sum {} \; > /tmp/shasums awk '{print $1}' /tmp/shasums | sort | uniq -d > /tmp/shadupes grep -f /tmp/shadupes /tmp/shasums | sort
Danke für die Tips. Leider arbeiten alle nur auf Dateiebene und erkennen nicht, ob ein Ordner vollständig oder mit minimalen Änderungen in einem anderen dupliziert ist. Was mir an anti-twin gefällt, ist die Bilder-Ähnlichkeitssuche. Gibt es so etwas als Kommandozeilentool auch unter Linux? Dann könnte ich mir selbst den Duplikate-Report stricken, wie ich ihn brauche, und dabei auch Ordner-Hierarchien vergleichen. Falls ihr sonst noch Tips habt, die das beschriebene leisten, nehme ich sie gerne entgegen. Duplikate durch Hardlinks ersetzen und nur Datei mit Datei vergleichen ohne Ähnlichkeiten zwischen Ordnern zu erkennen ist NICHT was ich suche. Jan
>ob ein Ordner vollständig oder mit minimalen Änderungen Aus dem obigen Output die zweite Spalte durch dirname schicken und dann durch uniq. >Bilder-Ähnlichkeitssuche Guck mal bei ImageMagick nach PHASH
Bob schrieb: >>ob ein Ordner vollständig oder mit minimalen Änderungen > Aus dem obigen Output die zweite Spalte durch dirname schicken und dann > durch uniq. Lieber Bob, ich habe erkannt, dass du ganz hervorragend kurze Shellskripte zu jedem, aber auch wirklich jedem noch so komplizierten Problem erstellen kannst. Nur leider lösen sie nicht das gestellte Problem, sondern ein anderes, welches du dir ausdenkst, oder genauer gesagt, welches zufällig das Problem ist, welches durch dein Skript gelöst wird, denn offenbar denkst du überhaupt nicht nach. Es hilft überhaupt nichts, wenn ich jeden Ordner kenne, in dem eine duplizierte Datei liegt. Ich möchte Ordner angezeigt bekommen, die nahezu vollständig woanders dupliziert sind. Und nein, ich möchte dazu kein weiteres Skript von dir, ich frage lediglich, ob es dazu schon fertige Lösungen gibt. Jan
Daniel A. schrieb: >
1 | > |
2 | > path=. |
3 | > |
4 | > find "$path" -type f -exec md5sum {} \; > /tmp/md5_files |
5 | > |
6 | > grep -o '^[^ ]*' /tmp/md5_files | sort | uniq -d | |
7 | > while IFS='' read hash |
8 | > do grep ^$hash /tmp/md5_files | sed 's/^[^ ]* *//' |
9 | > done |
10 | > |
11 | > |
Das geht, glaube ich, auch einfacher:
1 | find <path> -type f -exec md5sum {} \; | sort | uniq -D -w 32 |
Bedenkt bitte auch, daß eine doppelte Datei "irgendwas.txt" verschiedene RECHTE an verschiedenen Orten haben könnte (obwohl sie den selben Inhalt besitzt).
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.