# Rust 项目:重复文件查找和清理 CLI ## 概述 使用 Rust 构建一个高效、安全的跨平台 CLI 工具,用于在指定目录中查找和处理重复文件。利用 Rust 的高性能 I/O 和并发能力来快速扫描。 ## 功能需求 ### 1. 核心功能:查找 - **指定目录**: 通过命令行参数指定扫描的根目录。 - **扫描策略**: 1. 按文件大小分组。 2. 对大小相同的文件,计算哈希值(推荐先部分哈希,后完整哈希)以确认重复。 - **并发处理**: 使用 `Rayon` 库并行计算文件哈希。 - **输出**: 清晰地打印出所有重复的文件组。 ### 2. 交互式处理 - **处理选项**: 扫描完成后,为每个重复组提供交互式选项:保留一个、全部删除、跳过。 - **安全措施**: 删除前必须有明确的确认提示。 - **预览模式**: 提供 `--dry-run` 标志,只报告操作,不实际修改文件。 ### 3. 高级功能 - **排除规则**: 支持 `--exclude` 参数,可使用 glob 模式排除目录或文件。 - **导出**: 支持将结果导出为 JSON 或 CSV。 - **日志**: 使用 `log` 和 `env_logger` 提供不同级别的日志输出。 ## 技术栈 - **语言**: Rust - **CLI解析**: `clap` - **并发**: `rayon` - **哈希**: `sha2` 或 `blake3` - **日志**: `log`, `env_logger` - **交互**: `dialoguer` (提示), `indicatif` (进度条) ## 项目结构 ``` /duplicate-finder ├── src/ │ ├── main.rs # 入口和 CLI 解析 │ ├── scanner.rs # 核心扫描逻辑 │ ├── file_utils.rs # 文件和哈希工具 │ └── interactive.rs # 交互处理逻辑 └── Cargo.toml ``` ## 任务步骤 1. **初始化**: `cargo new duplicate-finder`,并在 `Cargo.toml` 中添加依赖。 2. **CLI设计**: 使用 `clap` 的派生宏定义命令行参数和标志。 3. **扫描逻辑**: 在 `scanner.rs` 中实现递归遍历、按大小分组和高效哈希计算的逻辑。 4. **并发实现**: 使用 `Rayon` 的并行迭代器 (`par_iter`) 加速哈希计算。 5. **交互模块**: 在 `interactive.rs` 中使用 `dialoguer` 向用户展示选项并获取输入。 6. **主函数**: 解析 CLI 参数,调用扫描模块,然后将结果传给交互模块处理。 7. **错误处理**: 广泛使用 `Result` 和 `?` 操作符处理 I/O 等错误。 8. **测试**: 编写单元测试验证核心逻辑,编写集成测试模拟 CLI 调用。 **先行任务**: 设计核心数据结构(如用于存储文件信息的 `struct` 和 `HashMap`),并规划扫描和哈希算法的详细步骤。