Seite 1 von 1

Dateien und Ordner kopieren (shutil/md5)

Verfasst: Donnerstag 14. Februar 2008, 08:50
von mathi
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()

Verfasst: Donnerstag 14. Februar 2008, 10:02
von rayo
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

Verfasst: Donnerstag 14. Februar 2008, 10:13
von mathi
@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!

Verfasst: Donnerstag 14. Februar 2008, 10:26
von 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.

Verfasst: Donnerstag 14. Februar 2008, 12:54
von Leonidas
Außer den von BlackJack schon erwähnten sehr guten Tools gibt es auch noch rdiff-backup, welches man auch verwenden kann.