Forum: PC Hard- und Software Duplikate in Backups finden & übersichtlich anzeigen


von Jan (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?


von Daniel A. (daniel-a)


Lesenswert?

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
von Lukey (Gast)


Lesenswert?

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).

von Nikolai H. (Gast)


Lesenswert?

Der Total Commander macht so etwas ganz gut. Ordner synchronisieren, 
Duplikate finden, etc.

von Bob (Gast)


Lesenswert?

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

von Jan (Gast)


Lesenswert?

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

von Bob (Gast)


Lesenswert?

>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

von Jan (Gast)


Lesenswert?

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

von A. H. (ah8)


Lesenswert?

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

von oszi40 (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.