4 个版本
0.0.4 | 2020 年 4 月 5 日 |
---|---|
0.0.3 | 2020 年 4 月 5 日 |
0.0.2-alpha | 2020 年 4 月 2 日 |
0.0.1-alpha | 2020 年 4 月 2 日 |
#1398 在 文件系统
42 次每月下载
24KB
532 代码行
ddup
ddup
(检测重复)是一个非常快的工具,可以识别 Windows NTFS 卷中可能重复的文件。
用法
递归扫描 C:
ddup C:
递归扫描 C:,搜索 .dmp 文件(不区分大小写)
ddup C: -m **\*.dmp -i
输出
Scanning drive C: with matcher `**\*.dmp` (case-sensitive) [Fuzzy comparison]
[1/3] Generating recursive dirlist
Finished in 7.798245 seconds
[2/3] Grouping by file size
Finished in 0.0028928 seconds
[3/3] Grouping by hash in thread pool
Potential duplicates [84654 bytes]
C:\Windows\LiveKernelReports\NDIS-20190504-0002.dmp
C:\ProgramData\Microsoft\Windows\Containers\Dumps\f9292c13-143c-4070-98b5-7e12e2afddfc.dmp
Finished in 0.001117 seconds
Overall finished in 7.857446 seconds
安装
从 crates.io 安装
cargo install ddup
从存储库安装
cargo install --git https://github.com/netaneld122/ddup
实现
此工具是用 Rust 编写的。
ddup
通过利用 NTFS USN 日志 机制来获取递归目录列表,以便读取 MFT(《主文件表》)条目的 USN(更改跟踪)记录。
可以通过以下 IOCTL
获取 Windows USN 记录
USN 记录代表文件或目录,彼此之间相互链接,因此要解析文件的完整路径
必须在记录上执行类似于 SQL 的“递归连接”,通过 HashMap
实现。
解析完整路径后,我们开始通过多次迭代来比较文件
- 找到具有相同大小的文件组
- 使用模糊哈希同时在所有核心上比较文件
结果很可能相同,尽管这不是严格保证的。
要确保完全相同,请使用 --strict
标志(但这可能会严重影响性能)
请注意,由于实现的方式,ddup
需要提升到管理员权限。
依赖关系
~5–14MB
~153K SLoC