Crates.io | dir-cmp |
lib.rs | dir-cmp |
version | 0.1.0 |
source | src |
created_at | 2023-02-18 09:02:43.039136 |
updated_at | 2023-02-18 09:02:43.039136 |
description | compare two directories |
homepage | |
repository | https://github.com/JimmyFoobar/dir-cmp |
max_upload_size | |
id | 788090 |
size | 68,426 |
This Rust library aims to provide convient functions to compare to two file trees.
//define options
let diff_options = Options {
ignore_left_only: false,
ignore_right_only: false,
filter: None,
ignore_equal: false,
recursive: true,
};
//get dirs to compare
let left_dir = Path::new("./foo");
let right_dir = Path::new("./bar");
//compare
let result = compare_dirs(&left_dir, &right_dir, diff_options);
In order blacklist(exclude
) or whitelist (include
) any folder or file names, a filter can be added to the compare options.
A filter consists of a list of regular expressions.
// define filter to ignore ".git" directory
let regex = Regex::new(r"\.git$").unwrap();
let filter = Filter::Exclude(vec![regex]);
//define options
let diff_options = Options {
ignore_left_only: false,
ignore_right_only: false,
filter: Some(filter),
ignore_equal: false,
recursive: true,
};
//get dirs to compare
let left_dir = Path::new("./foo");
let right_dir = Path::new("./bar");
//compare
let result = compare_dirs(&left_dir, &right_dir, diff_options);
The compare_dirs
function is implemented in two flavors: full and light.
The difference is that full::compare_dirs
compares also file contents while light::compare_dirs
only compares names / pathes.
The lib can be tested using the Cli provided in this repo. It was inspired by diff
, but only covers the basic functionality.
dir-cmp -h
dir-cmp -r <LEFT> <RIGHT>
To evaluate the speed of this library, we can compare it against diff
.
One simple approach is to simply compare this repo against itself:
time diff -r . .
// 0.01s user 0.19s system 99% cpu 0.209 total
time dir-cmp -r . .
// 0.26s user 0.46s system 75% cpu 0.945 total
The result clearly shows that there is a lot of room for improvement.