#directory #recursion #parallel #walk #iterator

jwalk

并行执行文件系统遍历,并生成排序后的流式结果

13 个版本 (7 个破坏性更新)

0.8.1 2022 年 12 月 15 日
0.7.0 2022 年 12 月 15 日
0.6.0 2021 年 1 月 6 日
0.5.2 2020 年 12 月 28 日
0.3.0 2019 年 2 月 21 日

#34 in 文件系统

Download history 46886/week @ 2024-04-20 48305/week @ 2024-04-27 49965/week @ 2024-05-04 56969/week @ 2024-05-11 52166/week @ 2024-05-18 44285/week @ 2024-05-25 53825/week @ 2024-06-01 50413/week @ 2024-06-08 53586/week @ 2024-06-15 52641/week @ 2024-06-22 53703/week @ 2024-06-29 54285/week @ 2024-07-06 54123/week @ 2024-07-13 54714/week @ 2024-07-20 54461/week @ 2024-07-27 56964/week @ 2024-08-03

228,876 每月下载量
用于 428 个 Crates (直接使用 79 个)

MIT 许可证

66KB
1K SLoC

jwalk

文件系统遍历。

  • 使用 rayon 并行执行
  • 以排序顺序流式传输条目
  • 自定义排序/过滤/跳过/状态

Build Status

用法

将以下内容添加到您的 Cargo.toml

[dependencies]
jwalk = "0.5"

了解更多: docs.rs/jwalk

示例

递归遍历 "foo" 目录,按名称排序

use jwalk::{WalkDir};

for entry in WalkDir::new("foo").sort(true) {
  println!("{}", entry?.path().display());
}

灵感

该库受到 walkdirignore 的启发。它试图将 ignore 的并行性和 walkdir 的流式迭代器 API 结合起来。一些代码和注释直接来自 walkdir

为什么使用这个库?

当您需要流式排序结果时,此库特别有用。在我的测试中,对于具有元数据的排序结果,它的速度大约是 walkdir 的 4 倍。此外,此库的 process_read_dir 回调允许您在生成之前任意排序/过滤/跳过/状态条目。

为什么不使用这个库?

目录遍历已经相当快。如果您不需要此库的速度,则 walkdir 提供了一个更小、经过更多测试的单线程实现。

此库的并行性发生在目录级别。当遍历具有许多目录的深度文件系统时,它会很有帮助。当读取具有许多文件的单个目录时,它不会有所帮助。

基准测试

基准测试,比较此库与 walkdirignore

依赖关系

~1.5MB
~25K SLoC