Forum: PC Hard- und Software Ordner vergleichen mit Hindernissen


von Fabi S. (Gast)


Lesenswert?

Guten Morgen Forum,

ich hab hier folgende Situation:
In der Familie geistern mehrere Festplatten mit mehr oder weniger 
ähnlichem Inhalt herum.
Ursprünglich wollte man wohl regelmäßig Backups machen, aber das Ganze 
wurde nie konsequent zu Ende gebracht.
Die Dateien auf den Platten sind meiner Meinung nach größtenteils 
identisch, aber jede Platte hat potentiell Dateien gespeichert die 
woanders nicht drauf sind.
Außerdem ist die Ordnerstruktur nicht identisch da einzelne Platten 
gelegentlich mal "sortiert" worden sind.
Heißt im Prinzip:
Auf Platte A gibt es eine Datei:
ordner/Datei.txt
Und auf B gibt es die gleiche Datei unter:
ganz/anderer/Ordner/Datei.txt

Ich versuche nun, den Wirrwarr zu entwirren und alles sauber auf einer 
"Master"-Platte zusammenzufahren.
Zuerst mal würde ich schauen was auf der Masterplatte schon alles drauf 
ist.
Den Rest muss man dann wohl händisch durchsehen und einsortieren.

Leider scheiden herkömmliche Diff-Tools wie meld oder BC aus weil die 
Ordnerstrukturen teilweise über mehrere Ebenen unterschiedlich sind.
Ich müsste ja einen Diff von Platte A gegen B durchführen wo 
Ordnerstrukturen ignoriert werden.

Mit welchen Programmen krieg ich hier Ordnung rein?
Spontan kenn ich nichts, mein letzter AUsweg wäre wohl, mir ein 
Python-Skript zu häkeln.

Hat jemand Ideen?

von Stefan K. (stefan1971)


Lesenswert?

Mit Unison synchronisiere ich die USB-Platten meines 
Offline-Datenarchivs:
https://www.cis.upenn.edu/~bcpierce/unison/

Habe eine Archiv-Masterplatte A, auf die ich von Zeit zu Zeit alte Daten 
manuell auslagere und dann per Unison mit Backup-Platte B und C 
synchronisiere (erfolgt in beide Richtungen). Könnte sich auch für 
Deinen Zweck hier eignen. Das Tool ist anscheinend ausentwickelt, 
Neuerungen gibt es schon länger keine mehr. Es funktioniert gut (unter 
macOS). Wenn die Synchronisation mal nicht loslaufen will, muss man die 
Unison-Cache-Dateien löschen. Passiert aber nur sehr selten.

von Jens M. (schuchkleisser)


Lesenswert?

AntiTwin kann Bilder und Dateien sowohl binär als auch nach Ähnlichkeit 
finden.
Damit könntest du schon mal binär identische Dateien entsorgen und 
hättest nur noch die Unterschiede zu sortieren...

von georg (Gast)


Lesenswert?

Fabi S. schrieb:
> Auf Platte A gibt es eine Datei:
> ordner/Datei.txt
> Und auf B gibt es die gleiche Datei unter:
> ganz/anderer/Ordner/Datei.txt

Das ist immer noch hochriskant - es muss sich ja nicht um die gleiche 
Datei handeln, bloss weil der Name gleich ist, und selbst wenn kann der 
Versionsstand verschieden sein. Bei Unix und Konsorten ist es übrigens 
gängig, hunderte Dateien gleichen Namens zu haben, die sich dadurch 
unterscheiden in welchem Ordner sie gespeichert sind.

Jens M. schrieb:
> Damit könntest du schon mal binär identische Dateien entsorgen und
> hättest nur noch die Unterschiede zu sortieren...

Das wäre mal eine Teillösung.

Als Fazit, das jetzt allerdings auch nichts mehr nützt: man muss von 
Anfang an eine logisch begründbare Ordnung einhalten. Ein Chaos 
anrichten ist einfach und geht ganz schnell, der Rückweg ist viel 
mühsamer.

Stefan K. schrieb:
> per Unison mit Backup-Platte B und C
> synchronisiere (erfolgt in beide Richtungen)

Das mit beiden Richtungen ist noch viel riskanter.

Georg

von Route_66 H. (route_66)


Lesenswert?

georg schrieb:
> Das ist immer noch hochriskant - es muss sich ja nicht um die gleiche
> Datei handeln, bloss weil der Name gleich ist, und selbst wenn kann der
> Versionsstand verschieden sein.

Also doch: AntiTwin.

von 1605457567 (Gast)


Lesenswert?

Passt der einfachheithalber alles interessierende in eine Partition auf 
eine größere Disk?


fdupes - finds duplicate files in a given set of directories

DESCRIPTION
Searches the given path for duplicate files. Such files are found by 
comparing file sizes and MD5 signatures, followed by a byte-by-byte 
comparison.


hardlink - Link multiple copies of a file

DESCRIPTION
hardlink is a tool which replaces copies of a file with hardlinks, 
therefore saving space.


-------

auf win für win
Duplicate File Hard Linker (DFHL)
https://www.jensscheffler.de/dfhl
https://alternativeto.net/software/duplicate-file-hard-linker-dfhl-/

von Daniel A. (daniel-a)


Lesenswert?

Ich würde zunächst ein csv mit einem hash + dateipfad erstellen. 
Folgendes in den zu vergleichenden Verzeichnissen Ausführen (a.csv 
jeweils umbenennen, damit man nicht die vorherige überschreibt):
1
#!/bin/bash
2
( echo hash,file; find -type f -exec env file={} bash -c 'hash="$(sha1sum "$file" | awk "{print \$1}")"; echo [] | jq -r --arg hash "$hash" --arg "file" "$file" "[\$hash,\$file] | @csv"' \; ) > ~/a.csv

Danach hast du im home die csv Dateien. Installiere dann csvkit, das 
beinhaltet das praktische csvsql tool. Du kannst damit diese dann 
vergleichen.

Alle in a.csv, die nicht in b.csv sind:
1
csvsql --query 'SELECT a.file FROM a LEFT JOIN b ON a.hash=b.hash WHERE b.hash IS NULL' ~/a.csv ~/b.csv

von Manfred (Gast)


Lesenswert?

georg schrieb:
> Das ist immer noch hochriskant - es muss sich ja nicht um die gleiche
> Datei handeln, bloss weil der Name gleich ist,

http://www.bigbangenterprises.de/de/doublekillerpro/

kann das, bei scheinbar gleichen Dateien vergleicht der Inhalte.
Ist nicht frei, Löhnware!

von Nano (Gast)


Lesenswert?

Fabi S. schrieb:
> Ich versuche nun, den Wirrwarr zu entwirren und alles sauber auf einer
> "Master"-Platte zusammenzufahren.

Kauf dir ein NAS das mit einem sinnvollen RAID betrieben wird.
Denn eine einzige Masterplatte kann auch mal im ungünstigsten Fall 
ausfallen, das ist eine Schwachstelle, die es zu vermeiden gibt.

Außerdem kannst du das Wirrwar langfristig nur über ein NAS sinnvoll und 
bequem lösen.



> Mit welchen Programmen krieg ich hier Ordnung rein?

Mit fdupes findest du doppelte Dateien.

Kopiere alle Dateien aller Platten auf das NAS in jeweils ihr eigenes 
Verzeichnis.
Dann lege ein Masterverzeichnis an in dem du nach und Nach geordnet die 
Daten, die du sichern möchtest, reinschiebst.

Doppelte inhaltich identische Dateien findest du, wie jemand zuvor schon 
sagte, mit fdupes.
Das kannst du dazu nutzen, die doppelten zu löschen, die, die übrig 
bleibst, ordnest du in dein Masterverzeichnis ein.
Denke dir für diese eine sinnvolle Ordnerstruktur aus.


Als nächsten Schritt musst du die Dateien finden, die zwar den gleichen 
Namen tragen, aber inhaltlich verschieden sind.
Bau dir dafür ein bash Skript das Dateilisten inkl. Pfad aller Dateien 
in ihren Unterordnern anlegt.

Diese Liste sollte so aufgebaut sein, dass du sie sortieren kannst.
Dateinamen zuerst, den Pfad in einem Feld von einem sinnvollen 
Trennzeichen getrenntnen Feld dahinter.

Mithilfe der Liste musst du dir dann manuell den Inhalt aller dieser 
Dateien händisch ansehen, denn was ein sinnvoller Inhalt ist und was du 
eigentlich löschen willst, kann kein Programm bewerten. Diese Arbeit 
musst du schon selber machen.
Lösche dann davon die Duplikate, die du nicht mehr brauchst.

Dateien die thematisch komplett unterschiedlich sind und nie einen 
Zusammenhang haben, aber den gleichen Namen tragen z.b. datei.txt 
benennst du am besten, sofern möglich, um.
Ansonsten musst du die halt speziell behandeln und gleich in dein 
Masterverzeichnis entspreechend einsortieren.


Wenn du bei diesem Schritt angekommen bist, solltest du keine Duplikate 
und auch keine Dateien mit gleichem Namen mehr haben, und Dateien die 
zuvor den gleichen Namen hatte, aber thematisch über was völlig anderes 
handeln, solltest du bis dahin umbenannt haben.

Ab jetzt kannst du alle diese Daten struktiert in deinen Masterordner 
zusammenführen.


Wenn du Angst hast, dass du bei all dieser Vortgehensweise etwas 
löschst, was du vielleicht später doch noch einmal brauchst, dafür 
kannst du dann ein Versionsverwaltung (CVS) verwenden.
Beachte aber bitte, dass du mit dem CVS deine Datenwildnis zwar ordnen 
und strukturieren kannst, aber die Datenmenge wird dadurch nicht 
unbedingt kleiner, wenn das CVS Daten halten muss, die du eigentlich 
löschen wolltest.

Deswegen ist das CVS nur eine Notlösung, wenn dein eigentliches Ziel das 
ist, die Datenmenge zu reduzieren.

Als Notbehelf kannst du dir auf dem NAS, von den Platten, von dem du 
jeweils einen Ordner erstellt hast, noch eine identische Kopie anlegen.
Dann kannst du da später nachschauen.
Und wenn du diese Daten bis sagen wir mal in 6 Monaten nicht mehr 
benötigten solltest, kannst du diese Kopien löschen, da davon auszugehen 
ist, dass da nichts dabei ist, dass du behalten möchtest.


> Spontan kenn ich nichts, mein letzter AUsweg wäre wohl, mir ein
> Python-Skript zu häkeln.

Vieles kannst du auch mit Bashscripten realisieren.
Der Aufwand dürfte etwas geringer sein, als mit Python, da die einzelnen 
Programme wie sort, fdupes usw. ihre Funktion schon können. Allerdings 
bist du mit Python natürlich etwas flexibler.
Auf jeden Fall solltest du das gut testen, damit das Skript wirklich das 
macht, was es soll.

Beachte hier vor allem auch Sonderzeichen in Dateinamen.
Das Skript sollte durch diese nicht draus kommen.

Mein Ratschlag wäre, alle Dateien zuerst nach Sonderzeichen und 
Leerzeichen zu durchsuchen und die dann nach ASCII ohne Sonderzeichen 
umzubenennen.


Wenn du dann deinen Masterordner fertig hasst, kannst du die alten Daten 
löschen.

Von nun an kannst du mit rsync deine Rechner mit dem NAS synchronisieren 
oder, wofür hat man schließlich ein NAS, die Daten als Netzlaufwerk 
einbinden. Dann sind sie jedenfalls so gut wie immer bei jedem Rechner 
identisch.
Bei Daten, die von vielen bearbeitet werden, richte dir auf dem NAS ein 
CVS ein und pflege sie dann nach der Bearbeitung darüber ein.

von Nano (Gast)


Lesenswert?

Beachte bitte, das ein NAS kein Backup ist.

Du brauchst also noch Backupplatten, auf die du regelmäßig die Daten vom 
NAS draufkopierst.

von Sheeva P. (sheevaplug)


Angehängte Dateien:

Lesenswert?

Fabi S. schrieb:
> In der Familie geistern mehrere Festplatten mit mehr oder weniger
> ähnlichem Inhalt herum. [...]
>
> Ich versuche nun, den Wirrwarr zu entwirren und alles sauber auf einer
> "Master"-Platte zusammenzufahren. [...]
>
> Mit welchen Programmen krieg ich hier Ordnung rein?
> Spontan kenn ich nichts, mein letzter AUsweg wäre wohl, mir ein
> Python-Skript zu häkeln.

Vor geraumer Zeit stand ich vor einem ähnlichen Problem und habe mir 
(Überraschung) ein kleines Python-Progrämmchen dafür geschrieben, das Du 
im Anhang findest. Da das bislang nur für eine interne Verwendung 
vorgesehen war, hab' ich auf Dokumentation allerdings weitgehend 
verzichtet, sorry. Außerdem, Achtung: die Software setzt zudem einen 
Redis-Server und dafür natürlich auch den Python-Client voraus.

Zunächst wird das Skript "hashfiles.py" aufgerufen, als Parameter dienen 
dabei die Verzeichnisse, in denen gesucht werden soll. Es berechnet den 
SHA256-Hash für jede gefundene Datei, dieser Hash dient als Key für ein 
Set in Redis. Wenn der Hash bereits in Redis vorhanden ist, wird der 
(absolute) Dateiname dem Set zugefügt, ansonsten wird eine Liste mit dem 
Dateinamen als erstem Element erzeugt. Das Skript ist multithreaded und 
hat mehrere meiner CPU-Kerne ausgelastet, vielleicht geht es allerdings 
noch ein bisschen schneller (think Global Interpreter Lock), wenn Du es 
auf multiprocessing umbaust... ;-)

Am Ende von hashfiles.py (das nichts löscht!) hast Du in Deinem 
Redis-Server eine Datenstruktur, die etwa wie folgt aussieht:
1
{
2
  "duplifind:42ebc847c4b9faefd2[...]": {
3
    "lb:/home/sheeva/duplifind/asdf/zwei/namespaces.py",
4
    "lb:/home/sheeva/duplifind/asdf/eins/namespaces.py"
5
  },
6
  [...]
7
}

Das sagt: die Dateien haben denselben Hashwert und sind deswegen mit 
sehr hoher Wahrscheinlichkeit identisch.

Dabei ist "duplifind:" nur ein Präfix für die Keys, "lb" hingegen der 
Hostname, auf dem das Skript gelaufen ist (Datenträger von Remotehosts 
werden in meinem Netzwerk grundsätzlich über sshfs(1) gemountet...).

Danach würdest Du das Skript "duplicheck.py" ausführen; in der Version 
in meinem Tarball macht das erstmal nur eine Ausgabe, bitte achte auf 
(die auskommentierte) Zeile 24.

Wie auch immer: "hashfiles.py" tut nichts und duplifind.py -- in dieser 
Version -- auch nicht. Ich weiß, daß sie mit ein paar hundert TB Dateien 
prima funktionieren, auch wenn es... etwas länger dauert. Bitte frag', 
wenn Dir etwas unklar ist, bevor Du anfängst, etwas zu löschen. Und 
bitte mach' ein paar Versuche (mit Backups!!1), bevor Du... genau. Viel 
Spaß und Erfolg!

von Sheeva P. (sheevaplug)


Lesenswert?

Nano schrieb:
> Wenn du dann deinen Masterordner fertig hasst,

Oh, und wie ich den hasse... ;-)

von Andreas B. (bitverdreher)


Lesenswert?

Schau Dir mal fslint an. Der findet alle doppelten Dateien über Namen 
und auch Inhalte.
Ich würde alles auf eine neue Festplatte kopieren (mit cp -u quelle 
ziel) und dort dann fslint drüberlaufen lassen.

von Fabi S. (Gast)


Lesenswert?

Guten Morgen,

es kamen ein paar gute Vorschläge, danke dafür.
Die werd ich mir nun mal im Detail ansehen, heut abend gehts mit fdupes 
los.

Gruß

von Walter T. (nicolas)


Lesenswert?

Für Bilder und MP3-Dateien gibt/gab es brauchbare Tools, die nach 
Bildinhalt gehen. Für Bilder war "VisiPics" ganz nützlich. Für MP3 habe 
ich den Namen des Werkzeugs vergessen, es dürfte aber heute auch wenig 
mehr wert sein, weil es schon damals WMV&Co. nicht unterstützte. OGG gab 
es noch nicht.

Vielleicht gibt es modernere Varianten davon als Offline-Tools.

von 1605457567 (Gast)


Lesenswert?

Fabi S. schrieb:
> Guten Morgen,
>
> es kamen ein paar gute Vorschläge, danke dafür.
> Die werd ich mir nun mal im Detail ansehen, heut abend gehts mit fdupes
> los.
>
> Gruß

news:

https://github.com/jbruchon/jdupes
A powerful duplicate file finder and an enhanced fork of 'fdupes'.


-u --printunique       print only a list of unique (non-matched) files

in debian oldstable noch nicht angekommen.

---
jdupes provides a native Windows port

von oszi40 (Gast)


Lesenswert?

Der "kleine" Unterschied zwischen einem gutem Backup und einer Kopie 
ist:
Das originale Dateidatum + Zeit bleiben beim Backup erhalten.

von 1605457567 (Gast)


Lesenswert?

oszi40 schrieb:
> Der "kleine" Unterschied zwischen einem gutem Backup und einer Kopie
> ist:
> Das originale Dateidatum + Zeit bleiben beim Backup erhalten.

vlt. bei win aber auch da gibts sicher irgendwelche flags


cp -p

-p     same as --preserve=mode,ownership,timestamps

--preserve[=ATTR_LIST]

preserve the specified attributes
(default: mode,ownership,timestamps),
if  possible  additional
attributes: context, links, xattr, all


----


>>> geistern mehrere Festplatten mit mehr oder weniger
>>> ähnlichem Inhalt herum.


Wird das geschickteste sein erstmal so viel wie möglich Ballast 
abzuwerfen, aka windows ;). Die Originale behält man nat. erstmal

von Thomas F. (igel)


Lesenswert?

Freecommander XE kann dir schon mal Duplikate über Ordner hinweg 
raussuchen:

Datei -> Suche -> (mehrere Orte wählen) -> Duplikate

von Gerhard Z. (germel)


Lesenswert?

Es wurde ja schon vorgeschlagen, alle Platten auf eine große zu kopieren 
bevor man mehrfache sucht. Wenn man sich die Arbeit nicht machen will 
oder keine Platte genügender Größe zur Hand hat kann man unter Linux 
alle Platten in eine gemeinsame Verzeichnisstruktur einhängen bevor man 
plattenübergreifend mit fdupes alle mehrfachen Dateien suchen lässt. Von 
da aus kann man dan bequem aussortieren bevor man dann alles auf eine 
Platte kopiert. Ob sowas unter Windows auch geht weiß ich nicht.

: Bearbeitet durch User
von Manfred (Gast)


Lesenswert?

oszi40 schrieb:
> Das originale Dateidatum + Zeit bleiben beim Backup erhalten.

Das kann https://fastcopy.jp/en/.

Ich rufe Fastcopy des öfteren per Batchdatei. Ist leider nicht ganz 
ungefährlich, wenn man sync mit falschen Parametern macht.

von oszi40 (Gast)


Lesenswert?

Manfred schrieb:
> Das kann https://fastcopy.jp/en/.

robocopy /? löst auch viele Probleme, die man vorher nie hatte.
Duplikate fleißig löschen? Was wird konkret mit den Links darauf??

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.