/LuminS

A fast and reliable alternative to rsync for synchronizing local files written in Rust

Primary LanguageRustMIT LicenseMIT

LuminS

Luminous Synchronize

A fast and reliable alternative to rsync for synchronizing local files

Build Status Code Coverage Crate Docs

Demo

Note: This project is no longer actively maintained. Pull requests are still welcome.

Features

100% Rust
Powered by the Rayon library for high parallel perfomance
Supported on Unix-based platforms or Windows
Extremely fast at synchronizing directories with large quantities of files
Multithreaded copy, remove, and sync
A progress bar using indicatif

Usage

USAGE:
    lms [SUBCOMMAND]

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

SUBCOMMANDS:
    cp      Multithreaded directory copy
    help    Prints this message or the help of the given subcommand(s)
    rm      Multithreaded directory remove
    sync    Multithreaded directory synchronization [aliases: s]

Sync

USAGE:
    lms sync [FLAGS] <SOURCE> <DESTINATION>

FLAGS:
    -h, --help          Prints help information
    -n, --nodelete      Do not delete any destination files
    -s, --secure        Use a cryptographic hash function for hashing similar files
    -S, --sequential    Copy files sequentially instead of in parallel
    -V, --version       Prints version information
    -v, --verbose       Verbose outputs

ARGS:
    <SOURCE>         Source directory
    <DESTINATION>    Destination directory

Copy

USAGE:
    lms cp [FLAGS] <SOURCE> <DESTINATION>

FLAGS:
    -h, --help          Prints help information
    -S, --sequential    Copy files sequentially instead of in parallel
    -V, --version       Prints version information
    -v, --verbose       Verbose outputs

ARGS:
    <SOURCE>         Source directory
    <DESTINATION>    Destination directory

Remove

USAGE:
    lms rm [FLAGS] <TARGET>...

FLAGS:
    -h, --help          Prints help information
    -S, --sequential    Delete files sequentially instead of in parallel
    -V, --version       Prints version information
    -v, --verbose       Verbose outputs

ARGS:
    <TARGET>    Target directory

Benchmarks

Using hyperfine on an Intel i7-8550U with the following 2 test folders,

Directory Directory Size Number of Files
1 88MB 7262
2 105MB 252
Command Directory Time
lms sync 1 179.1 ms ± 5.1 ms
rsync -r --delete 1 717.8 ms ± 41.1 ms
lms cp 1 117.3 ms ± 3.6 ms
cp -r 1 283.4 ms ± 13.2 ms
lms rm 1 147.6 ms ± 8.6 ms
rm -rf 1 180.7 ms ± 4.3 ms
---------------------- --------------- -----------------------------
lms sync 2 101.2 ms ± 24.8 ms
rsync -r --delete 2 442.2 ms ± 19.6 ms
lms cp 2 33.8 ms ± 2.8 ms
cp -r 2 143.5 ms ± 18.8 ms
lms rm 2 10.0 ms ± 2.8 ms
rm -rf 2 27.4 ms ± 0.8 ms

Of course, these benchmarks can be highly dependent on CPU and IO devices.

Build

First install Rust (recommended using rustup).

$ git clone https://github.com/wchang22/LuminS.git
$ cd LuminS
$ cargo build --release

Install

Using cargo,

$ cargo install lms

Contributions

Suggestions, issues, and pull requests are welcome!