8 个版本 (3 个稳定版)

2.1.0 2022年12月26日
2.0.0 2022年11月8日
1.0.0 2022年11月5日
0.1.4 2022年10月29日

#128文件系统

Download history 1169/week @ 2024-02-28 1435/week @ 2024-03-06 1036/week @ 2024-03-13 641/week @ 2024-03-20 1059/week @ 2024-03-27 970/week @ 2024-04-03 743/week @ 2024-04-10 669/week @ 2024-04-17 1100/week @ 2024-04-24 1057/week @ 2024-05-01 1284/week @ 2024-05-08 1066/week @ 2024-05-15 1183/week @ 2024-05-22 1728/week @ 2024-05-29 1719/week @ 2024-06-05 2037/week @ 2024-06-12

6,918 每月下载量
9 Crates 中使用

MIT 许可证

28KB
345

Group 1

使用 Rust 编写的超快文件搜索包 🔥

Version info Documentation License

📦 使用方法

请在此处报告使用 rust search 遇到的问题:问题

在 Cargo.toml 中添加 rust_search = "2.0.0"

[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 不进行 相似度排序 ["afly.txt", "bfly.txt", "flyer.txt", "fly.txt"]

search 进行 相似度排序 ["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();

要按 date_created、date_modified、file_size 和/或 custom_filter 过滤文件,请使用

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();

👉 更多示例,请参阅 文档

⚙️ 性能基准

样本量差异是由于fd和glob是不同的工具,具有不同的用例。fd是一个用于搜索文件和目录的命令行工具。glob是一个可以用于搜索文件和目录的库。基准测试是在MacBook Air M2、16 GB统一内存上进行的。

基准测试使用hyperfine进行,基准测试文件可在基准测试驱动器文件夹中找到。

- Rust搜索与Glob

基准测试是在包含30万个文件的目录上进行的。

命令/库 平均[s] 最小[s] 最大[s] 相对
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搜索与FD

基准测试是在包含45K文件的目录上进行的。

命令/库 平均[ms] 最小[ms] 最大[ms] 相对
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.

👨‍💻 贡献者

由于这个库还处于早期阶段,因此任何贡献都将受到高度重视。

  • 文档
  • 基准测试
  • 实现指南
  • 代码改进

如果您想为这个项目做出贡献,请按照以下步骤操作

  1. 叉取项目
  2. 克隆叉取的仓库
  3. 创建功能分支
  4. 修改代码
  5. 提交更改
  6. 将更改推送到叉取的仓库
  7. 创建拉取请求
  8. 等待拉取请求被审查和合并(如果批准)

许可

本项目根据MIT许可条款授权。

Discord服务器 & LinkedIn

点击下面的按钮加入Discord服务器或LinkedIn

Join Discord Server Connect on Linkedin

依赖项

~4–14MB
~142K SLoC