elesiuta / backupy

A simple backup program in python with an emphasis on data integrity and transparent behaviour
https://pypi.org/project/BackuPy/
GNU General Public License v3.0
53 stars 3 forks source link
backup mirror sync

BackuPy

positional arguments: source Path to source dest Path to destination

optional arguments: -h, --help show this help message and exit --version show program's version number and exit

file mode options:

-m mode Main mode: for files that exist only on one side MIRROR (default) [source-only -> destination, delete destination-only] BACKUP [source-only -> destination, keep destination-only] SYNC [source-only -> destination, destination-only -> source] -s mode Selection mode: for files that exist on both sides but differ SOURCE (default) [copy source to destination] DEST [copy destination to source] NEW [copy newer to opposite side] NO [do nothing] -c mode Compare mode: for detecting which files differ ATTR (default) [compare file attributes: mod-time and size] ATTR+ [compare file attributes and record CRC for changed files] CRC [compare file attributes and CRC for every file]

misc file options:

--sync-delete Use the database to propagate deletions since the last sync --fi regex [regex ...] Filter: Only include files matching the regular expression(s) (include all by default, searches file paths) --fe regex [regex ...] Filter: Exclude files matching the regular expression(s) (exclude has priority over include, searches file paths) --noarchive Disable archiving files before overwriting/deleting to: <source|dest>/.backupy/Archives/yymmdd-HHMM/ <source|dest>/.backupy/Trash/yymmdd-HHMM/ --nofollow Do not follow symlinks when copying files --nomoves Do not detect when files are moved or renamed

execution options:

--noprompt Complete run without prompting for confirmation -d, --dbscan Only scan files to check and update their database entries -n, --dry-run Perform a dry run with no changes made to your files -q, --qconflicts Quit if database conflicts are detected (always notified) -> unexpected changes on destination (backup and mirror) -> sync conflict (file modified on both sides since last sync) -> file corruption (ATTR+ or CRC compare modes) -v, --verify Verify CRC of copied files

backend options (experimental):

--cold Do not scan files on destination and only use local databases --rsync Use rsync for copying files

configuration options:

--nolog Disable writing log and file databases to: /.backupy/Logs/log-yymmdd-HHMM.csv <source|dest>/.backupy/database.json -p, --posix Force posix style paths on non-posix operating systems -k, --save Save configuration to /.backupy/config.json and exit -l, --load Load configuration from /.backupy/config.json and run

BackuPy is a simple backup program in python with an emphasis on data integrity and transparent behaviour - https://github.com/elesiuta/backupy

BackuPy comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details.

## [Configuration File](#configuration-file)
- The config file is saved to, and loaded from `<source>/.backupy/config.json`
  - it contains all the options from the command line interface along with some additional options
  - the only CLI options that can be used with `--load` and can override settings in `config.json` are `-c mode`, `--dbscan`, and `--dry-run`
    - the overrides can enable `--dbscan` or `--dry-run` but not disable
  - see `backupy/config.py` for where all the options and defaults are stored in code
  - below is a description of all the other options that are available
- `source_unique_id` & `dest_unique_id`
  - unique id for each folder, used when `write_database_x2` is enabled, each assigned a random string by default
- `archive_dir` = ".backupy/Archive"
  - can be any subdirectory
- `config_dir` = ".backupy"
  - can't be changed under normal operation
- `log_dir` = ".backupy/Logs"
  - can be any subdirectory
- `trash_dir` = ".backupy/Trash"
  - can be any subdirectory
- `cleanup_empty_dirs` = True
  - delete directories when they become empty
- `root_alias_log` = True
  - abbreviate absolute paths to source and dest with `<source>` and `<dest>` in logs
- `stdout_status_bar` = True
  - show progress status bar
- `verbose` = True
  - print list of differences between directories to stdout
- `write_database_x2` = False
  - write both source and destination databases to each side using their `unique_id`, useful for syncing groups of more than two folders or with the `--sync-delete` flag
- `write_log_dest` = False
  - write a copy of the log to `<dest>/<log_dir>/log-yymmdd-HHMM-dest.csv`
- `write_log_summary` = False
  - alternative log structure, written in addition to standard log
- `nocolour` = False
  - disable colour when printing to stdout
## [Building From Source](#building-from-source)
- Run tests with

python setup.py test

- Building a python package

python setup.py sdist

- Building an executable with the GUI (depends on [Gooey](https://pypi.org/project/Gooey/)) (deprecated, may rewrite with flutter)

pyinstaller build.spec


- You can package the executable on Windows by running setup.iss with Inno Setup