dmap --用 Rust 写了个磁盘空间分析工具

0 阅读3分钟

dmap 是什么 dmap (github.com/Alfroul/dma…) 是一个 Rust 编写的终端交互式磁盘空间分析工具。没有复杂的命令行参数,运行后弹菜单选功能就行: dmap Large files Find files larger than a threshold Extension search Find files by extension Directory rank Rank subdirectories by size Duplicate detect Find duplicate files Type distribution Analyze disk usage by file type 选完功能后输入参数,工具会并行扫描当前目录并输出结果。 五个功能

  1. 大文件筛选 输入大小阈值(100MB、1.5GB 都行),列出所有超过该阈值的文件,按大小降序排列。
  2. 后缀名搜索 输入扩展名(rs、.mp4 都行),列出所有匹配文件,支持大小写不敏感。
  3. 目录空间排行 输入扫描深度,输出各子目录占用空间的柱状图,自动排除 .git、node_modules、target 等无用目录。
  4. 重复文件检测 这个功能花的时间最多,也做得最细。 三阶段哈希:
  5. 按文件大小分组 — 大小不同的文件不可能重复,这一步直接淘汰掉绝大多数
  6. 前 4KB 快速哈希 — 同大小的文件只读前 4KB 做 blake3 哈希,再次过滤
  7. 全文件 blake3 哈希 — 只对前两轮都通过的文件做全量哈希,确认真正重复 实测 C 盘全量扫描(365K 文件),大部分文件在第一步就被淘汰了。 自动排除系统目录: Windows 的 WinSxS、CatRoot、servicing 等目录是系统组件存储的硬链接,占重复检测结果的大头,但删了系统会崩。所以默认自动过滤这些噪声目录。 安全标记分类: 每组重复文件自动标记风险等级: 标记 含义 SAFE 用户文件(npm 包等) 3RD-PARTY 第三方软件重复 SYSTEM 系统文件 按可回收空间排序: 结果默认按 (份数-1) × 文件大小 降序排列,最有价值的清理目标排在最前面。 Markdown 导出: 6 万组结果在终端里看不完,支持导出为 Markdown 文件,方便二次分析或分享给别人看。
  8. 文件类型分布 按类型(视频/图片/音频/压缩包/文档/代码等)统计空间占比,柱状图展示。 性能优化 这个工具是 CPU + I/O 密集型的,Rust 的优势很明显:
  • 并行遍历 — jwalk + rayon 并行递归扫描目录
  • 多线程哈希 — blake3 开 rayon feature,通过 mmap 零拷贝 + 多线程哈希大文件
  • 零分配路径匹配 — 预计算 UTF-16 宽字符串模式(lazy_static),路径匹配不分配 String
  • FxHashMap — 热路径替换标准 HashMap,整数 key 和短哈希 key 更快 做了什么对比 扫描 C 盘 365K 文件,优化前后的核心路径:
  • 路径匹配从 to_string_lossy().to_string()(每次分配 String)→ encode_wide() + 预计算 pattern 匹配(零分配)
  • 全文件哈希从 64KB buffer 流式读取 → mmap + Hasher::update_rayon(多线程)
  • hash_group 外层循环从 for 串行 → par_iter 并行

MIT 协议,欢迎 Star / Issue / PR。

36bfce0b364e1bf9bc82d2eeced6183c.png