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/dfhlhttps://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):
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:
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.
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:
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.
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
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
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.
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??