backup.py

Modular and lightweight backup utility to save, encrypt and verify your personal data.
## Overview `backup.py` supports two major options: `--backup`, to create a new backup and `--extract` to extract an existing backup archive. In order to create a backup file, you first need to create a *"sources file"* to specify the absolute paths to backup. For instance: ```ini # directories end with a slash... photos=/home/marco/Pictures/ documents=/home/marco/Documents/ # while individual files do not wireguard=/etc/wireguard/wg0.conf ``` Then, you can start the backup with the following command: ```sh $ sudo ./backup.py -V --checksum --backup sources.ini /home/marco "very_bad_pw" Copying photos (1/3) Computing checksums...DONE └──Computing checksums... [██████████████████████████████] 100.0% (2/2) - (processing 'wallpaper2.jpg') Copying documents (2/3) Computing checksums...DONE └──Computing checksums... [██████████████████████████████] 100.0% (7844/7844) - (processing '__init__.cpython-313.pyc') Copying wireguard (3/3) Computing checksums...DONE └──Computing checksums... [██████████████████████████████] 100.0% (1/1) - (processing 'wg0.conf') Compressing backup...DONE └──Compressing backup... [██████████████████████████████] 100.0% (9062/9061) - (processing 'wg0.conf') Encrypting backup...DONE File name: '/home/marco/backup-wood-20260122.tar.gz.enc' Checksums file: '/home/marco/backup-wood-20260122.sha256' File size: 5533767184 bytes (5.15 GiB) Elapsed time: 2 minutes, 10 seconds ``` Both the `--checksum` and the `--verbose` (`-V`) flags are optional. The former generates a checksum file containing the hashes of each single file, the latter enables the *verbose mode*, which renders the user interface as shown before. To extract an existing backup, you can instead proceed as follows: ```sh $ ./backup.py -V -c --extract backup-wood-20260122.tar.gz.enc "very_bad_pw" backup-wood-20260122.sha256 Decrypting backup...DONE Extracting backup...DONE └──Extracting backup... [██████████████████████████████] 100.0% (9062/9062) - (processing 'wg0.conf') Verifying backup...DONE └──Verifying backup... [██████████████████████████████] 100.0% (7847/7847) - (processing '__init__.cpython-313.pyc') Backup extracted to: '/home/marco/Projects/backup.py/backup.py.tmp' Elapsed time: 1 minute, 3 seconds ``` This will create a new directory named `backup.py.tmp` on your local path. Just like before, the `-V` and the `-c` options are optional. ## Usage As stated before, `python.py` is built from scratch in modern Python (3.10+) without using any external dependency except for `tar` and `gpg`. The *sources file* follows an INI-like syntax structured using associative records between labels and absolute paths. In order words: ```ini