Initial commit to spin out into own repo
This commit is contained in:
42
backup.py
Executable file
42
backup.py
Executable file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/python3
|
||||
from pathlib import Path
|
||||
import json
|
||||
import tarfile
|
||||
import datetime
|
||||
from functools import partial
|
||||
import time
|
||||
def tar_filter(filters, tarinfo):
|
||||
if any([filter_name in tarinfo.name for filter_name in filters]):
|
||||
print(f"\tFiltering: {tarinfo.name}")
|
||||
return None
|
||||
return tarinfo
|
||||
|
||||
def local_backup(output_dir: Path, backup_name: str, inputs: list, ignore_patterns: list):
|
||||
current_time = datetime.datetime.now().isoformat()
|
||||
start = time.time()
|
||||
archive_path = output_dir / f"{backup_name}-{current_time}.tar.gz"
|
||||
filter_function = partial(tar_filter, ignore_patterns)
|
||||
print(archive_path)
|
||||
with tarfile.open(archive_path, "w:xz") as f:
|
||||
for file_or_dir in inputs:
|
||||
file_or_dir = Path(file_or_dir).expanduser().resolve()
|
||||
print(f"Compressing: {file_or_dir}")
|
||||
f.add(file_or_dir, filter=filter_function)
|
||||
|
||||
print(f"Total time: {(time.time() - start) / 60}mins")
|
||||
|
||||
|
||||
def backup_all():
|
||||
config_dir = Path(__file__).parent / "configs"
|
||||
config_files = sorted(config_dir.glob("*"))
|
||||
print(config_files)
|
||||
for file in config_files:
|
||||
text = file.read_text()
|
||||
config = json.loads(text)
|
||||
output_dir = Path(config["outputDir"]).expanduser().resolve()
|
||||
inputs = config["inputs"]
|
||||
ignore_patterns = config["ignorePatterns"]
|
||||
backup_name = file.stem
|
||||
local_backup(output_dir, backup_name, inputs, ignore_patterns)
|
||||
if __name__ == "__main__":
|
||||
backup_all()
|
||||
Reference in New Issue
Block a user