ubuntuusers.de

Kleines Programm zum verifizieren von Dateikopien gesucht

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

Tranceformic

Anmeldungsdatum:
27. Dezember 2008

Beiträge: 42

Wohnort: Hannover

Die Überschrift sagt eigentlich schon alles aus. Ich suche ein Programm mit dem ich kopierte einzelne Dateien und Dateien in ganzen Ordnern überprüfen kann ob die Kopie(n) wirklich 1:1 ist/sind. Adaptec Toast auf dem Mac hatte z.B. so eine Funktion: Originaldatei oder -Ordner auswählen und ZielDatei/-Ordner auswählen und fertig. Es zeigte dann an, welche Dateien nicht übereinstimmten und welche in Ordnung waren.

Manuell Prüfsummen vergleichen will ich nicht - ist viel zu mühsam bei der Masse die gesichert werden soll. Am liebsten wäre mir ein Programm das durch Rüberziehen kopiert und sofort automatisch überprüft und bestätigt. Mit dem Krusader soll so etwas gehen, glaube ich, allerdings will ich mir kein 110MB-Monster auf die Platte knallen, nur damit ich Dateien verifizieren kann. (Toast auf dem Mac war nur ein paar MB groß!)

Weiß jemand eine brauchbare und bequeme Lösung?

Vielen Dank schon mal für eure Antworten

janis96

Anmeldungsdatum:
22. November 2008

Beiträge: Zähle...

Meinst du so etwas in der Art? Ich kann auch noch schnell das Kopieren von ganzen Verzeichnissen hinzufügen, falls du das brauchst. Ne GUI schaff ich heut abend nicht mehr, also kein DragnDrop ☹, kann ich aber morgen machen. ☺

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#!/usr/bin/python
# -*- coding: utf-8 -*-

#Könnte quickndirty sein ;-)

import shutil, hashlib, sys

while True:
    quelle = raw_input("Quelldatei: ")
    ziel = raw_input("Zieldatei: ")
    
    m5q = hashlib.md5()
    m5q.update(open(quelle, "rb").read())
    print "MD5 der Quelldatei:", m5q.hexdigest()
    
    print "Kopieren..."
    shutil.copyfile(quelle, ziel)
    
    m5z = hashlib.md5()
    m5z.update(open(ziel, "rb").read())
    print "MD5 der Zieldatei:", m5z.hexdigest()
    if m5z.hexdigest() == m5q.hexdigest():
        print "MD5-Summen stimmen überein.\n"
    else:
        print "MD5 fehlerhaft!!!"
        sys.exit(1)

Auszuführen mit:

1
2
chmod +x name_der_datei_in_der_das_skript_gespeichert_wurde.py
./name_der_datei_in_der_das_skript_gespeichert_wurde.py

mfg Janis

Tranceformic

(Themenstarter)

Anmeldungsdatum:
27. Dezember 2008

Beiträge: 42

Wohnort: Hannover

Das geht zumindest schon mal vorsichtig in die richtige Richtung, ja. Drag&Drop muss nicht unbedingt sein, wäre aber schon super. Ansonsten müsste die Auswahl von Quelle und Ziel über ein Menü, als Ersatz, dann schon sein.

janis96

Anmeldungsdatum:
22. November 2008

Beiträge: 33

Schreib ich morgen.

janis96

Anmeldungsdatum:
22. November 2008

Beiträge: 33

MoinMoin! ☺

So, eine Testversion ist fertig. 👍

Da ich das ganze nun mit Python3 und GTK+ 3 gemacht habe, müssen folgende Pakete installiert werden:

1
sudo apt-get install python3, python3-gobject, gobject-introspection

Danach die Datei main.py (im Anhang) ausführen:

1
2
3
cd Ordner-in-dem-main.py-gespeichert-ist
chmod +x main.py
./main.py

Nun sollte es laufen. Schreib bitte, ob das Programm deinen Vorstellungen entspricht oder was noch geändert/verbessert werden soll.

❗ Es haben sich eventuell ein paar kleine Bugs eingeschlichen, die ich noch ausbessern werde. So ist es zum Beispiel möglich, im Modus "einzelne Datei kopieren", Ordner als Quelle anzugeben, was in einer Fehlermeldung resultiert.

Janis

Lizenz: CC0 ("Public Domain"): http://creativecommons.org/publicdomain/zero/1.0/deed.de

EDIT: Ach ja, noch was: Wenn du eine gesamte Ordnerstruktur kopierst, muss der Zielordner leer sein. Wenn du eine gesamte Ordnerstruktur prüfst werden die, Dateien aus dem Quellordner mit denen aus dem Zielordner verglichen, d. h. bei einem Quellordner mit den Dateien a,b,c,d und einem Zielorner mit ebendiesen Dateien a,b,c,d und weiteren Dateien e,f und g, wird trotzdem, angezeigt, dass die Prüfung erfolgreich war. It is not a bug, it's a feature! Das Programm prüft, ob die Kopie einer Ordnerstruktur identisch ist und nicht, ob der zweite Ordner noch zusätzliche Dateien enthält!

main.py (9.3 KiB)
Download main.py
Bilder

Tranceformic

(Themenstarter)

Anmeldungsdatum:
27. Dezember 2008

Beiträge: 42

Wohnort: Hannover

Habe die Sachen installiert. Wenn ich die main.py aber starten will, bekomme ich folgendes zurück:

Traceback (most recent call last):
  File "./4341517-main.py", line 19, in <module>
    from gi.repository import Gtk
ImportError: No module named gi.repository

Mag das evtl. daran liegen, dass ich hier gerade an einem Debian sitze? (chrunchbang war früher auch mal auf ubuntu-basis)

janis96

Anmeldungsdatum:
22. November 2008

Beiträge: 33

Tranceformic schrieb:

Mag das evtl. daran liegen, dass ich hier gerade an einem Debian sitze? (chrunchbang war früher auch mal auf ubuntu-basis)

Das mag daran liegen, probiers mal auf nem Ubuntu-Rechner, oder haste nur Debian? Sind die o.g. Pakete auch installiert?

Vegeta

Avatar von Vegeta

Anmeldungsdatum:
29. April 2006

Beiträge: 7943

Man kann rsync benutzen, wenn man den Parameter "-c" oder "--checksum" benutzt, werden die kopierten Dateien mit einer 128-bit MD4-Checksumme überprüft.

Tranceformic

(Themenstarter)

Anmeldungsdatum:
27. Dezember 2008

Beiträge: 42

Wohnort: Hannover

@janis96: Oha, wer sehen kann ist klar im Vorteil. Dachte die Pakete wären alle installiert, ist aber nur python-gobject anstelle python3-gobject installiert. 🙄 python3-gobject bietet mir weder synaptic noch apt-get an. Werde am Dienstag nochmal rumprobieren, vorher habe ich leider keine Zeit.

@Vegeta: rsync werde ich mir dann auch mal ansehen.

Danke ihr beiden

janis96

Anmeldungsdatum:
22. November 2008

Beiträge: 33

Tranceformic schrieb:

python3-gobject bietet mir weder synaptic noch apt-get an. Werde am Dienstag nochmal rumprobieren, vorher habe ich leider keine Zeit.

Benutzt du Precise? Wenn dem so ist, dann heißt das Paket glaube ich nicht python3-gobject, sondern python3-gi. 😳 Sorry, bin hier noch auf einem Oneiric Ocelot.

Ich habe noch mal überlegt, wie man das kopieren noch einfacher machen könnte, und bin auf die Idee gekommen, dass ich meinem Programm noch eine Nautilus-Erweiterung schreibe, die im Kontextmenü jeder Datei zusätzlich noch die Einträge "Sicher kopieren" und "Sicher einfügen" anzeigt.

Wenn man dann eine Datei/einen Ordner kopieren will, klickt man einfach auf "Sicher kopieren", worauf die Datei in eine MD5-geprüfte Zwischenablage kommt, und dann auf "Sicher einfügen", was die Datei/den Ordner dann einfügt UND prüft.

Entspricht das eher deinen Vorstellungen ❓

Tranceformic

(Themenstarter)

Anmeldungsdatum:
27. Dezember 2008

Beiträge: 42

Wohnort: Hannover

python3-gi hab ich hier leider irgendwie auch nicht zur Auswahl. 😕

Naja, nicht so schlimm. Habe eben die Empfehlung von Vegeta mit grsync als Oberfläche kurz ausprobiert. Scheint ganz gut zu funktionieren. Mit dem kleinen Nachteil, dass man erst in einem Untermenü "Dateien anstelle Ordnern kopieren" auswählen muss, um einzelne Datein kopieren zu können. Sinnig wäre es gewesen, wenn die Checkbox im Standart-Menü vorn wäre; ist aber noch verschmerzbar.

Ich habe hier leider Thunar in Verwendung. Trotzdem finde ich, dass die Idee mit der Nautilus-Erweiterung sicher für einige User eine sinnvolle Umsetzung wäre und dazu noch um vieles bequemer als die Ordner-Auswahl-Lösung bei grsync oder der main.py. Wenn ich hier ein Gnome/Nautilus-System am laufen hätte, wäre es definitiv die erste Wahl. Also, lass dich nicht aufhalten wenn du so etwas, oder eine Drag'n'Drop-Oberfläche dazu, programmieren möchtest.

Besten Dank für deine Mühen, janis96! Werde dein main.py evtl. noch auf ein paar anderen (älteren) Systemen ausprobieren, wenn ich Zeit finde.

Antworten |