2 unstable releases
Uses new Rust 2024
| 0.6.0 | Oct 11, 2025 |
|---|---|
| 0.5.1 | Oct 6, 2025 |
#494 in Filesystem
84KB
1K
SLoC
rbackup
rbackup is a fast, cross-platform, and multithreaded command-line utility written in Rust for performing incremental
backups of directories. It is inspired by tools like rsync and robocopy, but designed with simplicity, portability,
and localization in mind.
๐ View recent changes (Changelog)
โจ Features
- ๐ Incremental backup โ copies only new or modified files
- โก Multithreaded โ uses all CPU cores to speed up large backups
- ๐ Multilingual support โ English and Italian (with auto-detection)
- ๐ฆ Portable โ no installation required, single binary
- ๐งพ Optional logging โ write backup reports to a file
- ๐ Progress bar โ display graphical progress bar during copy process
- ๐คซ Quiet mode โ suppress all output for silent operation
๐ฆ Installation
๐ง AUR (Arch Linux)
yay -S rfortune
# or
paru -S rfortune
๐บ Homebrew (macOS/Linux)
brew tap umpire274/rbackup
brew install rbackup
๐ฆ Crates.io (Rust)
cargo install rbackup
๐ Usage
rbackup <source> <destination> [OPTIONS]
Note: If
rbackupis executed without any subcommand or positional arguments, the program will print the full help message and exit successfully with status code 0. This behavior is intended so invoking the binary with no arguments acts as a safe help display rather than an error.
โ Basic example
rbackup ~/Documents /mnt/backup_drive/Documents
๐งฉ Options
Global options (applicable to all commands)
| Option | Description |
|---|---|
-q, --quiet |
Suppress console output |
-t, --timestamp |
Prepend timestamp to messages |
--log <FILE> |
Write output to a log file |
-l, --lang <code> |
Force language (e.g. en, it) |
-V, --version |
Show version |
-h, --help |
Show help message |
๐ Commands
Below are the top-level commands with the most relevant options and quick usage notes for each. This layout is easier to scan than a dense table when commands have many options.
copy
Description: Perform an incremental backup from a source directory to a destination directory. Only new or modified files are copied.
Usage:
rbackup copy <source> <destination> [OPTIONS]
Important options:
<source> <destination>โ required positional arguments-q,--quietโ suppress console output-t,--timestampโ prepend timestamps to messages--log <FILE>โ write output to a log file-x, --exclude <PATTERN>โ exclude files matching the given glob pattern (repeatable)--absolute-excludeโ match exclude patterns against absolute source paths--ignore-caseโ perform case-insensitive matching for exclude patterns--dry-runโ perform a dry-run without copying files
Example:
rbackup copy C:\source\folder D:\backup\folder --exclude "*.tmp" --dry-run --log dryrun.log
config
Description: Manage the configuration file (view, initialize or edit).
Usage:
rbackup config [OPTIONS]
Important options:
--initโ initialize a default configuration file--printโ print the current configuration to stdout--editโ open the configuration in the user's editor--editor <EDITOR>โ specify the editor to use (overrides $EDITOR/$VISUAL)
Example:
rbackup config --init
help
Usage:
rbackup help [COMMAND]
Description: Print help for a specific command (e.g. rbackup help copy).
๐ Exclude patterns (--exclude)
rbackup copy supports flexible exclude patterns to skip files and directories during a backup. The
--exclude <PATTERN> option can be used multiple times to provide multiple glob patterns.
Where patterns are matched
- By default, patterns are matched against the path relative to the source directory. Example: with source
/home/me/project, patternbuild/**matches/home/me/project/build/foo. - Use
--absolute-excludeto match the pattern against the absolute path of the source file instead. - The matcher also tests the file basename (the filename only). This means a simple pattern like
$RECYCLE.BINorThumbs.dbwill match files whose name equals that string anywhere in the source tree.
Case sensitivity
- By default, matching is case-sensitive.
- Use
--ignore-caseto enable case-insensitive matching for exclude patterns.
Examples
- Exclude macOS DMG files and Thumbs.db files (case-insensitive):
rbackup copy /source /dest --log backup.log --exclude '*.dmg' --exclude 'Thumbs.db' --ignore-case
- Exclude the Windows Recycle Bin directory by basename and hidden files starting with a dot:
rbackup copy /source /dest --exclude '$RECYCLE.BIN' --exclude '.*'
Tip: In
zsh/bashwrap patterns that contain$or other special characters in single quotes:'$RECYCLE.BIN'.
Absolute vs relative matching
- Relative match (default):
--exclude 'temp/**'will skip anything undersource/temp/. - Absolute match:
--absolute-excludewith--exclude '/home/me/project/temp/**'will match only that absolute path.
Dry-run and logging
- Combine
--dry-runwith--logto generate a report of what would be copied or skipped โ but without changing the destination:
rbackup copy /source /dest --exclude '*.tmp' --dry-run --log dryrun.log
- The log file contains both
CopiedandSkippedentries. Skipped entries include the exclude pattern that caused the skip when applicable, which helps debugging complex exclude sets. Skipped files are also printed to the console unless the--quietoption is used.
Use-cases
- Backup only source code files, ignoring build artifacts:
rbackup copy /home/dev/project /backup/project --exclude 'target/**' --exclude '*.o' --exclude '*.class'
- Mirror a user's Documents folder but exclude large media files and the Recycle Bin:
rbackup copy ~/Documents /mnt/backup/Documents --exclude '*.mp4' --exclude '$RECYCLE.BIN' --exclude 'Thumbs.db' --ignore-case
- Debug why a file is skipped: run a dry-run with logging and inspect the log โ each skipped line shows the pattern that caused the skip.
Use cases (CLI & developer)
This section provides concise, copy-pastable examples for common CLI workflows and for managing translations during development.
1) Incremental backup (copy)
- Basic backup:
rbackup C:\Users\alice\Documents D:\Backups\alice\Documents
- Backup with logging, timestamps and quiet off:
rbackup C:\source\folder D:\backup\folder --log backup.log --timestamp
- Dry-run to debug excludes and generate a report (Windows
cmd.exe):
rbackup C:\source D:\dest --exclude "*.tmp" --dry-run --log dryrun.log
2) Manage configuration
- Initialize a default configuration file:
rbackup config --init
- Edit configuration using the default editor (Windows will use Notepad if $EDITOR not set):
rbackup config --edit
3) Developer: translations workflow (translations_tool)
A small helper script is provided at scripts/translations_tool to validate translations and to generate/apply language
templates.
- Validate all language entries have the same keys (must be run from the repo root):
cd scripts\translations_tool
cargo run -- validate
- Generate a template for a new language
esand print it (prefill with English values):
cd scripts\translations_tool
cargo run -- template es --fill-en
- Apply (insert) a template for
esintoassets/translations.json, creating a timestamped backup, and do not overwrite ifesalready exists:
cd scripts\translations_tool
cargo run -- apply es --fill-en
- Force overwrite an existing language entry (use with caution):
cd scripts\translations_tool
cargo run -- apply es --fill-en --force
Notes:
- The
applycommand creates a backup file underassets/named liketranslations.json.YYYYMMDD_HHMMSS.bakbefore modifyingassets/translations.json. - After applying a template, translate the values in-place with your editor, then run
cargo run -- validateto ensure key consistency.
๐ Example
rbackup /home/alex/Projects /mnt/usb-backup --log backup.log --timestamp
๐งช Build from source
To compile rbackup yourself:
git clone https://github.com/your-username/rbackup.git
cd rbackup
cargo build --release
For Windows, rbackup.rc will be embedded automatically in the executable.
๐ License
This project is licensed under the MIT License.
ยฉ 2025 Alessandro Maestri
๐ก Contributing
Pull requests are welcome! If youโd like to add support for more languages, improve performance, or fix bugs, feel free to fork the repo and contribute.
Dependencies
~11โ19MB
~371K SLoC