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 在 文件系统
6,918 每月下载量
在 9 Crates 中使用
28KB
345 行
📦 使用方法
请在此处报告使用 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.
👨💻 贡献者
由于这个库还处于早期阶段,因此任何贡献都将受到高度重视。
- 文档
- 基准测试
- 实现指南
- 代码改进
如果您想为这个项目做出贡献,请按照以下步骤操作
- 叉取项目
- 克隆叉取的仓库
- 创建功能分支
- 修改代码
- 提交更改
- 将更改推送到叉取的仓库
- 创建拉取请求
- 等待拉取请求被审查和合并(如果批准)
许可
本项目根据MIT许可条款授权。
Discord服务器 & LinkedIn
点击下面的按钮加入Discord服务器或LinkedIn
依赖项
~4–14MB
~142K SLoC