{"id":22686448,"url":"https://github.com/your-tools/rusync","last_synced_at":"2025-04-13T18:22:06.286Z","repository":{"id":46335131,"uuid":"132624763","full_name":"your-tools/rusync","owner":"your-tools","description":"Minimalist rsync implementation in Rust","archived":false,"fork":false,"pushed_at":"2023-12-29T12:56:49.000Z","size":192,"stargazers_count":141,"open_issues_count":3,"forks_count":23,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-19T00:05:33.057Z","etag":null,"topics":["cli","rsync","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/your-tools.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-08T14:56:33.000Z","updated_at":"2024-05-14T07:36:10.000Z","dependencies_parsed_at":"2025-03-10T19:37:25.075Z","dependency_job_id":"6ec8552f-9e9a-42e2-913d-6a936e6f5462","html_url":"https://github.com/your-tools/rusync","commit_stats":null,"previous_names":["dmerejkowsky/rusync"],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/your-tools%2Frusync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/your-tools%2Frusync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/your-tools%2Frusync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/your-tools%2Frusync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/your-tools","download_url":"https://codeload.github.com/your-tools/rusync/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248759134,"owners_count":21157095,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","rsync","rust"],"created_at":"2024-12-09T23:01:31.221Z","updated_at":"2025-04-13T18:22:06.256Z","avatar_url":"https://github.com/your-tools.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# rusync\n\n\u003ca href=\"https://crates.io/crates/rusync\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/rusync.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/dmerejkowsky/rusync/actions\"\u003e\u003cimg src=\"https://github.com/dmerejkowsky/rusync/workflows/Run%20tests/badge.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/dmerejkowsky/rusync/actions\"\u003e\u003cimg src=\"https://github.com/dmerejkowsky/rusync/workflows/Run%20linters/badge.svg\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/dmerejkowsky/rusync/actions\"\u003e\u003cimg src=\"https://github.com/dmerejkowsky/rusync/workflows/Audit%20dependencies/badge.svg\"/\u003e\u003c/a\u003e\n\n\nMinimalist `rsync` implementation in Rust.\n\n# Usage\n\n```\n$ cargo install rusync\n$ rusync test/src test/dest\n:: Syncing from test/src to test/dest …\n 50% 24/50 Downloads/archlinux.iso   00:01:30\n```\n\n# Caveat\n\nWe do everything we can to make sure data loss is impossible, but despite our best efforts, it may still happen.\n\nPlease make sure your files files are backed up if necessary before using `rusync` on sensitive data.\n\nThank you for your understanding!\n\n# Features\n\n* Easy to remember command line syntax.\n\n* Print progress on one line, and erase it when done, thus avoiding flooding your terminal\n  with useless noise.\n\n* Displays a reliable ETA, without sacrificing speed.\n\n* Unsurprising behavior: missing directories are created\n  on the fly, files are only copied if:\n\n  * destination is missing\n  * destination exists but is older than the source\n  * or source and destination have different sizes\n\n# Command line options\n\nJust two at the moment:\n\n* `--no-perms`: prevents`rusync` from trying to preserve file permissions (useful if you copy data from a Linux partition to NTFS for instance).\n* `--err-list FILE`: write name of entries that caused errors in the given file, separated by `\\n`\n\n\n# State of the project\n\nI consider this project *done* - I don't intend on adding new features. The goal was to learn more about Rust and I've learned plenty of things already. If there's a feature present in `rsync` that is not available in `rusync`, just use `rsync`  - or try and implement the feature yourself, I'll be happy to review and merge your changes :)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyour-tools%2Frusync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyour-tools%2Frusync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyour-tools%2Frusync/lists"}