Crates.io | rust_search |
lib.rs | rust_search |
version | 2.1.0 |
source | src |
created_at | 2022-10-29 07:09:04.363718 |
updated_at | 2022-12-26 05:33:40.091133 |
description | Blazingly fast file search library built in Rust |
homepage | |
repository | https://github.com/ParthJadhav/rust_search |
max_upload_size | |
id | 700883 |
size | 29,258 |
Please report any problems you encounter when using rust search here: Issues
Add rust_search = "2.0.0"
in Cargo.toml.
[dependencies]
rust_search = "2.0.0"
use rust_search::SearchBuilder;
fn main(){
let search: Vec<String> = SearchBuilder::default()
.location("~/path/to/directory")
.search_input("what to search")
.more_locations(vec!["/anotherPath/to/search", "/keepAddingIfYouWant/"])
.limit(1000) // results to return
.ext("extension")
.strict()
.depth(1)
.ignore_case()
.hidden()
.build()
.collect();
for path in search {
println!("{}", path);
}
}
use rust_search::{SearchBuilder, similarity_sort};
fn main() {
let search_input = "fly";
let mut search: Vec<String> = SearchBuilder::default()
.location("~/Desktop/")
.search_input(search_input)
.depth(1)
.ignore_case()
.build()
.collect();
similarity_sort(&mut search, &search_input);
for path in search {
println!("{:?}", path);
}
}
search without similarity sort
["afly.txt", "bfly.txt", "flyer.txt", "fly.txt"]
search with similarity sort
["fly.txt", "flyer.txt", "afly.txt", "bfly.txt",]
use rust_search::SearchBuilder;
let files: Vec<String> = SearchBuilder::default()
.location("/path/to/directory")
.ext("file_extension")
.build()
.collect();
use rust_search::SearchBuilder;
let files: Vec<String> = SearchBuilder::default()
.location("/path/to/directory")
.depth(1)
.build()
.collect();
To filter files by date_created, date_modified, file_size and/or custom_filter, use:
use rust_search::{FileSize, FilterExt, SearchBuilder};
use std::time::{Duration, SystemTime};
let search: Vec<String> = SearchBuilder::default()
.location("~/path/to/directory")
.file_size_greater(FileSize::Kilobyte(200.0))
.file_size_smaller(FileSize::Megabyte(10.0))
.created_after(SystemTime::now() - Duration::from_secs(3600 * 24 * 10))
.created_before(SystemTime::now())
.modified_after(SystemTime::now() - Duration::from_secs(3600 * 24 * 5))
.custom_filter(|dir| dir.metadata().unwrap().is_file())
.custom_filter(|dir| !dir.metadata().unwrap().permissions().readonly())
.build()
.collect();
👉 For more examples, please refer to the Documentation
The difference in sample size is due to the fact that fd and glob are different tools and have different use cases. fd is a command line tool that searches for files and directories. glob is a library that can be used to search for files and directories. The benchmark is done on a MacBook Air M2, 16 GB Unified memory.
Benchmarks are done using hyperfine, Benchmarks files are available in the benchmarks drive folder.
The benchmark was done on a directories containing 300K files.
Command / Library | Mean [s] | Min [s] | Max [s] | Relative |
---|---|---|---|---|
rust_search |
1.317 ± 0.002 | 1.314 | 1.320 | 1.00 |
glob |
22.728 ± 0.023 | 22.690 | 22.746 | 17.25 ± 0.03 |
The benchmark was done on a directories containing 45K files.
Command / Library | Mean [ms] | Min [ms] | Max [ms] | Relative |
---|---|---|---|---|
rust_search |
680.5 ± 2.1 | 678.3 | 683.6 | 1.00 |
fd -e .js |
738.7 ± 10.2 | 720.8 | 746.7 | 1.09 ± 0.02 |
+ rust_search is 17.25 times faster than Glob.
+ rust_search** is 1.09 times faster than FD.
Any contributions would be greatly valued as this library is still in its early stages.
If you want to contribute to this project, please follow the steps below:
This project is licensed under the terms of the MIT license.
Click the button below to join the discord server or Linkedin