ich habe da ein kleines Problem mit meinem Python-Script.
Ich habe ca. 17TB Daten von Maschine A auf Maschine B kopiert und möchte nun per md5sum schauen ob alle files korrekt kopiert wurden. Dafür habe ich mir ein kleines Script gebaut, welches ich per cygwin auf einem Windows-Rechner laufen lasse.
Hier mein Setup:
- Windows 7 x64 Pro
- 16GB RAM
- Intel S3420GP Board
- Intel Xeon X3460 @ 2.80GHz
- Cygwin x64 (1.7.29(0.272/5/3)
- Python 2.7.5
Ich habe mir Maschine A und Maschine B per Netzlaufwerk gemountet und möchte für beide (jeweils ein eigenes Script) die md5 Summen berechnen.
Bei den Dateien handelt es sich um Film-Schnitt-Dateien.Es sind ca. 190.000 Files und umfassen ca. 17TB Speicherplatz.
Ich gehe dabei so vor:
1. Alle Files auflisten und in eine .txt-Datei speichern
2. Für jede Zeile in diesem Textfile die md5 Summe berechnen und in eine zweite .txt-Datei speichern.
Allerdings treffe ich hier immer auf denselben Fehler - MemoryError - dieser Tritt erst nach einiger Zeit auf und teilweise bei unterschiedlichen Files.
Hier mein Code:
Code: Alles auswählen
#!/usr/bin/python
import os
import hashlib
import subprocess
path ='/cygdrive/e/'
output = "/cygdrive/c/Users/administrator/Desktop/md5list_maschineA.txt"
tempout = "/cygdrive/c/Users/administrator/Desktop/filelist_maschineA.txt"
def run_command(path):
p1 = subprocess.Popen(["find", path, "-type", "f"], stdout=subprocess.PIPE)
return iter(p1.stdout.readline, b'')
filelist = run_command(path)
md5list = []
tout = open(tempout, 'w', 1)
print "Let's get all the files we need"
for line in filelist:
line = line.strip()
line = line.replace('\n','')
tout.write(line + "\n")
tout.close()
print "Now we calculate the md5sum"
tout = open(tempout, 'r', 1)
myFile = open(output, 'w', 1)
for line in tout:
rline = line.replace('\n','')
tmp = hashlib.md5(open(rline).read()).hexdigest()
str = "%s | %s" %(line,tmp)
str = str.replace('\n','')
myFile.write(str + '\n')
tout.close()
myFile.close()
Vielen Dank im voraus.