Advertisement
ade_talon

Folder Backup

Mar 20th, 2022 (edited)
321
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.67 KB | None | 0 0
  1. import shutil
  2. from datetime import datetime
  3. import sys
  4. import os
  5. from os.path import isfile, join
  6. import time
  7.  
  8. os.system("cls||clear")
  9. print("\n[  Running Home Assistant Backup ...  ]")
  10.  
  11.  
  12. # function(s)
  13. def create_logfile():
  14.     if not os.path.exists("script_run.log"):
  15.         x = "FILENAME{}|".format(" " * 16)
  16.         x += " SIZE{}|".format(" " * 12)
  17.         x += " SCRIPT START{}|".format(" " * 28)
  18.         x += " SCRIPT END{}|".format(" " * 30)
  19.         x += " TOTAL RUNTIME"
  20.        
  21.         y = "\n{}".format("=" * 141)
  22.        
  23.         log = open("script_run.log", "w")
  24.         log.write(x)
  25.         log.write(y)
  26.         log.close()
  27.  
  28.  
  29. t = open("targets.config", "r")
  30. lines = t.readlines()
  31. t.close()
  32.  
  33. for line in lines:
  34.     # Create variables
  35.     script_start_time = time.time()
  36.     script_start_date = datetime.now().strftime("%A %B %d, %Y @ %I:%M %p")
  37.     target_elements = line.split(",")
  38.     dir_name = r"{}".format(target_elements[0].strip())
  39.     bu_dir = r"{}".format(target_elements[1].strip())
  40.     prefix = r"{}".format(target_elements[2].strip())
  41.     files2keep = int(target_elements[3].strip())
  42.     date = datetime.now().strftime("%Y%m%d%H%M%S")
  43.     output_filename = r"{}\{}{}".format(bu_dir, prefix, date)
  44.  
  45.     # Create backup
  46.     shutil.make_archive(output_filename, 'zip', dir_name)
  47.  
  48.     # Get list of existing backups
  49.     files = [f for f in os.listdir(bu_dir) if isfile(join(bu_dir, f))]
  50.  
  51.     # Arrange all existing files in array from newest to oldest
  52.     file_list = []
  53.     for file in files:
  54.         file_list.append(file[0:-4])
  55.     file_list.sort(reverse=True)
  56.  
  57.     # Remove older files
  58.     i = 1
  59.     for item in file_list:
  60.         if (i > int(files2keep)) and ("original" not in item):
  61.             os.remove("{}\{}.zip".format(bu_dir, item))
  62.         i += 1
  63.  
  64.     # Create script output variables
  65.     script_end_time = time.time()
  66.     script_end_date = datetime.now().strftime("%A %B %d, %Y @ %I:%M %p")
  67.     runtime = script_end_time - script_start_time
  68.     size = "{} KB".format(round(os.path.getsize(output_filename + ".zip") / 1024))
  69.  
  70.     # Create logfile entry
  71.     create_logfile()
  72.  
  73.     # This dictionary is used for formatting the log output
  74.     filename = "{}{}.zip".format(prefix, date)
  75.     info_dict = {
  76.         filename: 24,
  77.         size: 16,
  78.         script_start_date: 40,
  79.         script_end_date: 40
  80.         }
  81.  
  82.     # Write output to logfile
  83.     log = open("script_run.log", "a")
  84.     output_str = "\n"
  85.  
  86.     for key, length in info_dict.items():
  87.         output_str += "{}{}| ".format(key, " " * (length - len(key)))
  88.  
  89.     output_str += "{} seconds".format(round(runtime))
  90.     log.write(output_str)
  91.     log.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement