Home

Awesome

<h1 align="center">LuminS</h1> <h3 align="center">Luminous Synchronize</h3> <h4 align="center">A fast and reliable alternative to rsync for synchronizing local files</h4> <p align="center"> <a href="https://travis-ci.org/wchang22/LuminS"><img src="https://travis-ci.org/wchang22/LuminS.svg?branch=master" alt="Build Status" /></a> <a href="https://codecov.io/gh/wchang22/LuminS"><img src="https://codecov.io/gh/wchang22/LuminS/branch/master/graph/badge.svg" alt="Code Coverage" /></a> <a href="https://crates.io/crates/lms"><img src="https://img.shields.io/crates/v/lms.svg" alt="Crate" /></a> <a href="https://docs.rs/lms"><img src="https://docs.rs/lms/badge.svg" alt="Docs" /></a> </p> <p align="center"> <img src="examples/lumins.gif" alt="Demo" </p> <h3 align="center"><b>Note</b>: This project is no longer actively maintained. Pull requests are still welcome.</h3>

Features

<table> <tr><td><b>100% Rust</b></td></tr> <tr><td><b>Powered by the <a href="https://github.com/rayon-rs/rayon">Rayon</a> library for high parallel perfomance</b></td></tr> <tr><td><b>Supported on Unix-based platforms or Windows</b></td></tr> <tr><td><b>Extremely fast at synchronizing directories with large quantities of files</b></td></tr> <tr><td><b>Multithreaded copy, remove, and sync</b></td></tr> <tr><td><b>A progress bar using <a href="https://github.com/mitsuhiko/indicatif">indicatif</a></b></td></tr> </table>

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,

DirectoryDirectory SizeNumber of Files
188MB7262
2105MB252
CommandDirectoryTime
lms sync1179.1 ms ± 5.1 ms
rsync -r --delete1717.8 ms ± 41.1 ms
lms cp1117.3 ms ± 3.6 ms
cp -r1283.4 ms ± 13.2 ms
lms rm1147.6 ms ± 8.6 ms
rm -rf1180.7 ms ± 4.3 ms
------------------------------------------------------------------
lms sync2101.2 ms ± 24.8 ms
rsync -r --delete2442.2 ms ± 19.6 ms
lms cp233.8 ms ± 2.8 ms
cp -r2143.5 ms ± 18.8 ms
lms rm210.0 ms ± 2.8 ms
rm -rf227.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!