![Group 1](https://user-images.githubusercontent.com/42001064/198829818-c4035432-8721-45e1-ba2d-4d2eb6d0c584.svg) Blazingly fast file search crate built in Rust 🔥 [![Version info](https://img.shields.io/crates/v/rust_search.svg)](https://crates.io/crates/rust_search) [![Documentation](https://docs.rs/rust_search/badge.svg)](https://docs.rs/rust_search) [![License](https://img.shields.io/crates/l/rust_search.svg)](https://github.com/parthjadhav/rust_search/blob/master/LICENSE-MIT)

📦 Usage

Please report any problems you encounter when using rust search here: Issues

Add rust_search = "2.0.0" in Cargo.toml.

toml [dependencies] rust_search = "2.0.0"

Examples

```rust use rust_search::SearchBuilder;

fn main(){ let search: Vec = SearchBuilder::default() .location("~/path/to/directory") .searchinput("what to search") .morelocations(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);
}

} ```

```rust use rustsearch::{SearchBuilder, similaritysort}; fn main() { let searchinput = "fly"; let mut search: Vec = SearchBuilder::default() .location("~/Desktop/") .searchinput(searchinput) .depth(1) .ignorecase() .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",]

```rust use rust_search::SearchBuilder;

let files: Vec = SearchBuilder::default() .location("/path/to/directory") .ext("file_extension") .build() .collect(); ```

```rust use rust_search::SearchBuilder;

let files: Vec = SearchBuilder::default() .location("/path/to/directory") .depth(1) .build() .collect(); ``` To filter files by datecreated, datemodified, filesize and/or customfilter, use:

```rust use rust_search::{FileSize, FilterExt, SearchBuilder}; use std::time::{Duration, SystemTime};

let search: Vec = SearchBuilder::default() .location("~/path/to/directory") .filesizegreater(FileSize::Kilobyte(200.0)) .filesizesmaller(FileSize::Megabyte(10.0)) .createdafter(SystemTime::now() - Duration::fromsecs(3600 * 24 * 10)) .createdbefore(SystemTime::now()) .modifiedafter(SystemTime::now() - Duration::fromsecs(3600 * 24 * 5)) .customfilter(|dir| dir.metadata().unwrap().isfile()) .customfilter(|dir| !dir.metadata().unwrap().permissions().readonly()) .build() .collect(); ```

👉 For more examples, please refer to the Documentation

⚙️ Benchmarks

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.

- Rust Search vs Glob

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 |


- Rust Search vs FD

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 |


Results:-

```diff + rust_search is 17.25 times faster than Glob.

👨‍💻 Contributors

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:

  1. Fork the project
  2. Clone the forked repository
  3. Create a feature branch
  4. Make changes to the code
  5. Commit the changes
  6. Push the changes to the forked repository
  7. Create a pull request
  8. Wait for the pull request to be reviewed and merged (if approved)

License

This project is licensed under the terms of the MIT license.

Discord server & Linkedin

Click the button below to join the discord server or Linkedin

Join Discord Server Connect on Linkedin