#file-sync #rsync #linux

bin+lib lms

A fast and reliable alternative to rsync for synchronizing local files

10 releases

0.4.0 Jun 28, 2020
0.3.4 Jul 23, 2019
0.3.3 May 28, 2019
0.3.2 Mar 23, 2019
0.1.2 Feb 27, 2019

#445 in Filesystem

Download history 8/week @ 2023-11-20 11/week @ 2023-11-27 20/week @ 2023-12-04 12/week @ 2023-12-11 42/week @ 2023-12-18 9/week @ 2023-12-25 3/week @ 2024-01-01 6/week @ 2024-01-08 7/week @ 2024-01-15 8/week @ 2024-01-22 13/week @ 2024-02-12 27/week @ 2024-02-19 18/week @ 2024-02-26 14/week @ 2024-03-04

72 downloads per month
Used in httm

MIT license

89KB
2K SLoC

LuminS

Luminous Synchronize

A fast and reliable alternative to rsync for synchronizing local files

Build Status Code Coverage Docs

Demo

Features

100% Rust
Powered by the Rayon library for high parallel perfomance
Supported on Unix-based platforms
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!

Dependencies

~6–17MB
~187K SLoC