selective-backup.py

This commit is contained in:
2023-11-27 17:19:03 +01:00
parent 1a441009b6
commit 35faa3f4a3
+39 -16
View File
@@ -1,29 +1,52 @@
import shutil
from datetime import datetime from datetime import datetime
from zipfile import ZipFile
import os import os
import shutil
filelist = "/media/hd/cloud/Tilman/Computer/selective-backups/filelist.txt"
days_to_keep = 5
months_to_keep = 5
daily_dir = "/media/hd/cloud/Tilman/Computer/selective-backups/daily/" daily_dir = "/media/hd/cloud/Tilman/Computer/selective-backups/daily/"
weekly_dir = "" monthly_dir = "/media/hd/cloud/Tilman/Computer/selective-backups/monthly/"
monthly_dir = ""
basedir = "/media/hd/cloud/" basedir = "/media/hd/cloud"
filelist = "/media/hd/cloud/Tilman/Computer/selective-backups/filelist.txt"
now = datetime.now() now = datetime.now()
date_time = now.strftime("%Y-%m-%d_") today = datetime.today()
target_filename = today.strftime('%Y-%m-%d') + "_selective-backup.zip"
with open(filelist) as file: with open(filelist) as file:
lines = [line.rstrip() for line in file] lines = [line.rstrip() for line in file]
#os.chdir(basedir)
# backup directories and files
with ZipFile(daily_dir + target_filename, 'w') as zip:
for line in lines: for line in lines:
#f_basename = os.path.basename(line) if os.path.isdir(basedir + line):
target_filename = date_time + line.replace("/","|") + ".tar.gz" for root, dirs, files in os.walk(basedir + line):
print(target_filename) for file in files:
src_path = basedir + line file_path = os.path.join(root, file)
src_file = os.path.basename(src_path) zip.write(file_path)
src_dir = os.path.dirname(src_path) else:
print(src_dir) zip.write(basedir + line)
shutil.make_archive(daily_dir + target_filename, 'gztar', src_dir, src_file)
# if first of month, copy over
if now.day == 1:
shutil.copy(daily_dir + target_filename, monthly_dir)
# delete old backups
for filename in os.listdir(daily_dir):
date_object = datetime.strptime(filename[:10], '%Y-%m-%d')
delta = today - date_object
if delta.days > days_to_keep:
os.remove(daily_dir + filename)
for filename in os.listdir(monthly_dir):
date_object = datetime.strptime(filename[:10], '%Y-%m-%d')
num_months = (today.year - date_object.year) * 12 + (today.month - date_object.month)
if num_months > months_to_keep:
os.remove(monthly_dir + filename)
#os.path.basename
#shutil.make_archive(output_filename, 'zip', dir_name)