Dateien und Ordner kopieren (shutil/md5)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

hallo, ich möchte ein kleines "Backup-Programm schreiben, das den Inhalt eines gegebenen Ordner in einen anderen vorhandenen Ordner kopiert (der Inhalt sind dateien und Ordner)

Code: Alles auswählen

SOURCE = r"E:\Eigene Dateien\Code" 
DESTINATION = r"F:\BackupDateien"
shutil.copytree(SOURCE, DESTINATION)
Damit kann ich den Ordner kopieren, aber das ist ja nicht was ich möchte ? copyfile ist dann aber auch nicht das richtige oder?
ABER: kopiert werden soll nur, was geändert wurde, deshalb dachte ich an eine md5 prüfung in folgender Art:
- durchsuche Quellverzeichnis nach Dateien und vergleiche mit Dateien im Zielverzeichnis, wenn md5 ungleich, überschreibe backupdatei, wenn gleich, lasse es, wenn Zieldatei nicht vorhanden kopiere ohne prüfung, wenn Quelldatei im Unterordner, lege Zielunterordner an.

So solls werden. Ich bitte Euch um Tipps für den Einstieg, da ich mit Dateien/Ordnern noch nicht gearbeitet habe.

md5 habe ich im pythin-Wiki gefunden:

Code: Alles auswählen

from hashlib import md5

BLOCKSIZE = 8192

def sum_file(fileobj):
    summer = md5()
    while True:
        data = fileobj.read(BLOCKSIZE)
        if not data:
            break
        summer.update(data)
    return summer.hexdigest()

f = open("test.py")
print sum_file(f)
f.close()
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Hi

Also ist vielleicht ein bisschen Offtopic aber ich habe mir auch ein kleines Backup-Programm geschrieben und es mit Hilfe von 7zip gemacht.

7zip ist ein kompriemierungs Programm, dass gleich ein Kommandozeilen-Interface anbietet. http://www.7-zip.org/

Da kann ich nun ein Befehl eingeben der wie folgt in Klartext aussieht:
Erstellen ein Archiv und füge alle Dateien hinzu die nicht im Archiv ErstesBackup.7z sind (auch solche die neuer als im Archiv sind).

Ich finde das recht praktisch, mein Programm rundum ist eigentlich relativ klein:
In einem Backup Ordner hat es Verknüpfungen zu Ordnern die er sichern soll. Mein Programm liest diese Verknüpfungen aus und erstellt eine Ordnerliste die er dem 7zip-Programm übergibt und dieses macht dann die ganze Arbeit.

Falls du es auch mit 7zip machen möchtest, gibt es bei 7zip eine Hilfe, welche die Parameter für das Programm gut erklären und auch Beispiele liefert.

Gruss
mathi
User
Beiträge: 314
Registriert: Dienstag 27. November 2007, 14:30

@rayo:
Danke für den Tip, nur ist packen für mich keine Option:

Ich arbeite lokal mit Dateien, diese sollen dann in einem Ordner uf einem anderen Rechner (Server) abgelegt werden, damit andere damit arbeiten können.
Also will ich spiegeln, aber eben nicht blind jeden Morgen 3 GB durchs Netzwerk jagen, sondern nur kopieren, was neu erstellt oder geändert wurde!
BlackJack

Für einen realen Einsatz würde ich immer ein vorhandenes und gut getestetes Programm empfehlen. `rsync` oder `Unison` zum Beispiel. Gerade für den Einsatz über's Netz wäre es unsinnig so etwas, bloss schlechter, nach zu programmieren.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Außer den von BlackJack schon erwähnten sehr guten Tools gibt es auch noch rdiff-backup, welches man auch verwenden kann.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten