# rsyncr
![GPLv3 logo](http://www.gnu.org/graphics/gplv3-127x51.png)
Awesome useful `rsync` convenience wrapper for Python 3.
Does the heavy lifting of finding potential problems, plus detects potential moves.
We recommend using `PyPy`, which appears to operate order(s) of magnitude faster during the (inefficient) file tree computations.
## Installation
```sh
pip install rsyncr
```
This includes the following dependencies: `typing_extensions`, `textdistance`, but would also make use of `fuzzywuzzy`, `StringDist`, `brew-distance`, `edit-distance`, `editdistance-s` or `editdistance` if installed.
## Usage
`rsyncr` always operates on the *current folder*.
You only specify the target folder (plus options).
```text
rsyncr <target-path> [options]
```
with options:
```text
rsyncr (C) Arne Bachmann 2017-2022
This rsync-wrapper simplifies backing up the current directory tree.
Syntax: rsyncr <target-path> [options]
target-path is either a local folder /path or Drive:\path or a remote path [rsync://][user@]host:/path
using Drive: - use the drive's current folder (Windows only)
using Drive:\~ - use full source path on target drive
Copy mode options (default: update):
--add -a Immediately copy only additional files (otherwise add, and update modified)
--sync -s Remove files in target if removed in source, including empty folders
--del -d Only remove files, do not add nor update
--simulate -n Don't actually sync, stop after simulation
--estimate Estimate copy speed
--file <file path> Transfer a single local file instead of synchronizing a folder
--user <user name> -u Manual remote user name specification, unless using user@host notation
--skip-move Do not compute potential moves
Interactive options:
--ask -i In case of dangerous operation, ask user interactively
--force-foldername -f Sync even if target folder name differs
--force -y Sync even if deletions or moved files have been detected
--force-copy Force writing over existing files
Generic options:
--flat -1 Don't recurse into sub folders, only operate on current folder
--checksum -C Full file comparison using checksums
--compress -c Compress data during transport, handle many files better
--verbose -v Show more output
--help -h Show this information
Special options:
--with-checksums corrupDetect compatibility: if set, .corrupdetect files are not ignored
```
## Build process
1. Update the version in `pyproject.toml`
```bash
hatch clean && hatch build -t wheel
twine upload dist\*.whl
```
## rsync details
rsync status output explanation:
```
Source: https://stackoverflow.com/questions/4493525/rsync-what-means-the-f-on-rsync-logs
1: > received, . unchanged or modified (cf. below), c local change, * message, e.g. deleted, h hardlink, * = message following (no path)
2: f file, d directory, L symlink, D device, S special
3: c checksum of orther change
4: s size change
5: t time change
6: p permission
7: o owner
8: g group
9: u future
10: a ACL (not available on all systems)
11: x extended attributes (as above)
```
### rsync options
https://linux.die.net/man/1/rsync
```
-r --recursive recursive
-R --relative preserves full path
-u --update skip files newer in target (to avoid unnecessary write operations)
-i --itemize-changes Show results (itemize - necessary to allow parsing)
-t --times keep timestamps
-S --sparse sparse files handling
-b --backup make backups using the "~~" suffix (into folder hierarchy), use --backup-dir and --suffix to modify base backup dir and backup suffix. A second sync will remove backups as well!
-h --human-readable ...
-c --checksum compute checksum, don't use name, time and size
--stats show traffic stats
--existing only update files already there
--ignore-existing stronger than -u: don't copy existing files, even if older than in source
--prune-empty-dirs on target, if updating
-z, --compress --compress-level=9
```
Raw data
{
"_id": null,
"home_page": null,
"name": "rsyncr",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "UI, backup, feedback, interface, rsync, safety, wrapper",
"author": null,
"author_email": "Arne Bachmann <ArneBachmann@users.noreply.github.com>",
"download_url": null,
"platform": null,
"description": "# rsyncr\n\n![GPLv3 logo](http://www.gnu.org/graphics/gplv3-127x51.png)\n\nAwesome useful `rsync` convenience wrapper for Python 3.\nDoes the heavy lifting of finding potential problems, plus detects potential moves.\n\nWe recommend using `PyPy`, which appears to operate order(s) of magnitude faster during the (inefficient) file tree computations.\n\n\n## Installation\n\n```sh\npip install rsyncr\n```\n\nThis includes the following dependencies: `typing_extensions`, `textdistance`, but would also make use of `fuzzywuzzy`, `StringDist`, `brew-distance`, `edit-distance`, `editdistance-s` or `editdistance` if installed.\n\n\n## Usage\n\n`rsyncr` always operates on the *current folder*.\nYou only specify the target folder (plus options).\n\n```text\nrsyncr <target-path> [options]\n```\n\nwith options:\n\n```text\nrsyncr (C) Arne Bachmann 2017-2022\n This rsync-wrapper simplifies backing up the current directory tree.\n\n Syntax: rsyncr <target-path> [options]\n\n target-path is either a local folder /path or Drive:\\path or a remote path [rsync://][user@]host:/path\n using Drive: - use the drive's current folder (Windows only)\n using Drive:\\~ - use full source path on target drive\n\n Copy mode options (default: update):\n --add -a Immediately copy only additional files (otherwise add, and update modified)\n --sync -s Remove files in target if removed in source, including empty folders\n --del -d Only remove files, do not add nor update\n --simulate -n Don't actually sync, stop after simulation\n --estimate Estimate copy speed\n --file <file path> Transfer a single local file instead of synchronizing a folder\n --user <user name> -u Manual remote user name specification, unless using user@host notation\n --skip-move Do not compute potential moves\n\n Interactive options:\n --ask -i In case of dangerous operation, ask user interactively\n --force-foldername -f Sync even if target folder name differs\n --force -y Sync even if deletions or moved files have been detected\n --force-copy Force writing over existing files\n\n Generic options:\n --flat -1 Don't recurse into sub folders, only operate on current folder\n --checksum -C Full file comparison using checksums\n --compress -c Compress data during transport, handle many files better\n --verbose -v Show more output\n --help -h Show this information\n\n Special options:\n --with-checksums corrupDetect compatibility: if set, .corrupdetect files are not ignored\n```\n\n\n## Build process\n\n1. Update the version in `pyproject.toml`\n\n```bash\nhatch clean && hatch build -t wheel\ntwine upload dist\\*.whl\n```\n\n## rsync details\nrsync status output explanation:\n\n```\nSource: https://stackoverflow.com/questions/4493525/rsync-what-means-the-f-on-rsync-logs\n1: > received, . unchanged or modified (cf. below), c local change, * message, e.g. deleted, h hardlink, * = message following (no path)\n2: f file, d directory, L symlink, D device, S special\n3: c checksum of orther change\n4: s size change\n5: t time change\n6: p permission\n7: o owner\n8: g group\n9: u future\n10: a ACL (not available on all systems)\n11: x extended attributes (as above)\n```\n\n### rsync options\n\nhttps://linux.die.net/man/1/rsync\n```\n-r --recursive recursive\n-R --relative preserves full path\n-u --update skip files newer in target (to avoid unnecessary write operations)\n-i --itemize-changes Show results (itemize - necessary to allow parsing)\n-t --times keep timestamps\n-S --sparse sparse files handling\n-b --backup make backups using the \"~~\" suffix (into folder hierarchy), use --backup-dir and --suffix to modify base backup dir and backup suffix. A second sync will remove backups as well!\n-h --human-readable ...\n-c --checksum compute checksum, don't use name, time and size\n--stats show traffic stats\n--existing only update files already there\n--ignore-existing stronger than -u: don't copy existing files, even if older than in source\n--prune-empty-dirs on target, if updating\n-z, --compress --compress-level=9\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "rsyncr - An enhanced rsync backup wrapper script",
"version": "2024.1921.2416",
"project_urls": {
"Homepage": "http://github.com/ArneBachmann/rsyncr"
},
"split_keywords": [
"ui",
" backup",
" feedback",
" interface",
" rsync",
" safety",
" wrapper"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e6044d1e3c12783c931b9c01a1daa38b0f7351e456a13d3c0926469f4569d5d7",
"md5": "9cb47009c3a2777ea2b1e8f12676c6d2",
"sha256": "5552d4a2a8ee9b06b7eaecef6f89974b6627658076403d4a57cb380ad575e33a"
},
"downloads": -1,
"filename": "rsyncr-2024.1921.2416-py3-none-any.whl",
"has_sig": false,
"md5_digest": "9cb47009c3a2777ea2b1e8f12676c6d2",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 27675,
"upload_time": "2024-09-21T12:27:35",
"upload_time_iso_8601": "2024-09-21T12:27:35.438018Z",
"url": "https://files.pythonhosted.org/packages/e6/04/4d1e3c12783c931b9c01a1daa38b0f7351e456a13d3c0926469f4569d5d7/rsyncr-2024.1921.2416-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-21 12:27:35",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "ArneBachmann",
"github_project": "rsyncr",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "rsyncr"
}