''' Created on Jul 24, 2014 @author: Brett Paufler Copyright Brett Paufler TODO: NEED TO REFORMAT ANNOTATE But not today NEED TO ADD PASSWORD #TODO - one of these days, add error documents to output, as well CUSTOM 7z batch utility auto back up the noted catalogue_computer paths ''' import subprocess import os from collections import namedtuple DESKTOP = r'C:\Users\DATA\Desktop' BACKUP = r'C:\Users\DATA\Desktop\BACKUP' PASSWORD = '' back_up_data = namedtuple('back_up_data', ['name', 'file_in', 'file_out']) def make_back_up_data(base, sub=None): name = '_'.join([base, sub]) if sub else base if sub: file_in = os.path.join(DESKTOP, base, sub) else: file_in = os.path.join(DESKTOP, base, '*.*') file_out = os.path.join(BACKUP, '%s.7z' % name) f_data = back_up_data(name, file_in, file_out) return f_data dirs_in = ['TODO', 'FINANCE', 'WRITING', 'PHOTOS', 'PHOTO_NEW',] dirs_base = [make_back_up_data(base_folder) for base_folder in dirs_in] dirs_sub = [make_back_up_data(base_folder, sub_folder) for base_folder in dirs_in for sub_folder in os.listdir(os.path.join(DESKTOP, base_folder)) if os.path.isdir(os.path.join(DESKTOP, base_folder, sub_folder))] possible_back_ups = dirs_base + dirs_sub file_out_existing = [f[:-3] for f in os.listdir(BACKUP) if f.endswith('7z')] print file_out_existing back_ups_to_run = [b for b in possible_back_ups if b.name not in file_out_existing] errors = [] for b in back_ups_to_run: password = '_'.join([PASSWORD, b.name]) command = [r"C:\Program Files\7-Zip\7z.exe", #path_in to 7z 'a', #archive, #'-r-', #no recurse '-mhe=on', #hides files structure without password '-p%s' % password, b.file_out, #os.path.join(BACKUP, 'test.7z'), #destination b.file_in, #os.path.join(DESKTOP, 'test', '*.*'), #source ] print ' '.join(command) error_value = subprocess.call(command) if error_value: errors.append((error_value, b.name)) print b for error in errors: print errors ''' for zipFile in filesToZip: zipSave = zipFile + '7z.7z' cmd = [r"C:\Program Files (x86)\7-Zip\7z.exe", 'a', '-mx5', '-mhe=on', '-pfred %s' % PASSWORD, zipFile, zipFile ] a = subprocess.call(cmd) feedbackText = "%d for %s (0 is Good)\n" % (a, zipFile) feedback.append(feedbackText) if a != 0: problem = True ''' errorCodes = ''' Error Codes 0 Okey Dokey 1 Problems: a locked file, most likely 2 Crash 7 Check Command Syntax 8 Get a Better Computer 255 User Terminated''' #feedback.append(errorCodes) #if problem: # sN = r'C:\ TODO 7z-FAIL-log.txt' #else: # sN = r'C:\ Full Path Needed 7z-OK-Feedback-File.txt' #with open(sN,'w' ) as feedFile: # for fB in feedback: # feedFile.write(fB) #print feedback #filesToZip = [ # r'C:\ TODO', # r'C:\ obfuscated\FINANCE', # r'C:\ ditto WRITING', # r'C:\ seems silly not to change \WEBSITES', # r'C:\ paranoia runs deep \PHOTOS', # r'C:\ so these directories \PROGRAMS', # ] #feedback = [] #problem = False