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 选完功能后输入参数,工具会并行扫描当前目录并输出结果。 五个功能
- 大文件筛选 输入大小阈值(100MB、1.5GB 都行),列出所有超过该阈值的文件,按大小降序排列。
- 后缀名搜索 输入扩展名(rs、.mp4 都行),列出所有匹配文件,支持大小写不敏感。
- 目录空间排行 输入扫描深度,输出各子目录占用空间的柱状图,自动排除 .git、node_modules、target 等无用目录。
- 重复文件检测 这个功能花的时间最多,也做得最细。 三阶段哈希:
- 按文件大小分组 — 大小不同的文件不可能重复,这一步直接淘汰掉绝大多数
- 前 4KB 快速哈希 — 同大小的文件只读前 4KB 做 blake3 哈希,再次过滤
- 全文件 blake3 哈希 — 只对前两轮都通过的文件做全量哈希,确认真正重复 实测 C 盘全量扫描(365K 文件),大部分文件在第一步就被淘汰了。 自动排除系统目录: Windows 的 WinSxS、CatRoot、servicing 等目录是系统组件存储的硬链接,占重复检测结果的大头,但删了系统会崩。所以默认自动过滤这些噪声目录。 安全标记分类: 每组重复文件自动标记风险等级: 标记 含义 SAFE 用户文件(npm 包等) 3RD-PARTY 第三方软件重复 SYSTEM 系统文件 按可回收空间排序: 结果默认按 (份数-1) × 文件大小 降序排列,最有价值的清理目标排在最前面。 Markdown 导出: 6 万组结果在终端里看不完,支持导出为 Markdown 文件,方便二次分析或分享给别人看。
- 文件类型分布 按类型(视频/图片/音频/压缩包/文档/代码等)统计空间占比,柱状图展示。 性能优化 这个工具是 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。