| Crates.io | lms_lib |
| lib.rs | lms_lib |
| version | 0.4.0 |
| created_at | 2022-01-31 04:41:50.014643+00 |
| updated_at | 2022-01-31 04:41:50.014643+00 |
| description | A fast and reliable alternative to rsync for synchronizing local files |
| homepage | |
| repository | https://github.com/kedap/lumins-lib |
| max_upload_size | |
| id | 524381 |
| size | 152,857 |
| 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 |
use lms_lib::{core, parse::Flag};
use std::path::Path;
main () {
let src = Path::new("/foo/bar/hello.txt");
let dest = Path::new("/bar/foo/hi.txt");
core::copy(&src, &dest, Flag::empty())?;
}
use lms_lib::{core, parse::Flag};
use std::path::Path;
main () {
let src = Path::new("/foo/bar/hello.txt");
let dest = Path::new("/bar/foo/hi.txt");
core::synchronize(&src, &dest, Flag::empty())?;
}
use lms_lib::{core, parse::Flag};
use std::path::Path;
main () {
let target = Path::new("/bar/foo/hi.txt");
core::remove(&target, Flag::empty())?;
}
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.
Suggestions, issues, and pull requests are welcome!