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?
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.
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...
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
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.
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-/
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 |
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!
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.
Beachte bitte, das ein NAS kein Backup ist. Du brauchst also noch Backupplatten, auf die du regelmäßig die Daten vom NAS draufkopierst.
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!
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.
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ß
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.
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
Der "kleine" Unterschied zwischen einem gutem Backup und einer Kopie ist: Das originale Dateidatum + Zeit bleiben beim Backup erhalten.
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
Freecommander XE kann dir schon mal Duplikate über Ordner hinweg raussuchen: Datei -> Suche -> (mehrere Orte wählen) -> Duplikate
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.