rust.md 2.6 KB

Rust 项目:重复文件查找和清理 CLI

概述

使用 Rust 构建一个高效、安全的跨平台 CLI 工具,用于在指定目录中查找和处理重复文件。利用 Rust 的高性能 I/O 和并发能力来快速扫描。

功能需求

1. 核心功能:查找

  • 指定目录: 通过命令行参数指定扫描的根目录。
  • 扫描策略:
    1. 按文件大小分组。
    2. 对大小相同的文件,计算哈希值(推荐先部分哈希,后完整哈希)以确认重复。
  • 并发处理: 使用 Rayon 库并行计算文件哈希。
  • 输出: 清晰地打印出所有重复的文件组。

2. 交互式处理

  • 处理选项: 扫描完成后,为每个重复组提供交互式选项:保留一个、全部删除、跳过。
  • 安全措施: 删除前必须有明确的确认提示。
  • 预览模式: 提供 --dry-run 标志,只报告操作,不实际修改文件。

3. 高级功能

  • 排除规则: 支持 --exclude 参数,可使用 glob 模式排除目录或文件。
  • 导出: 支持将结果导出为 JSON 或 CSV。
  • 日志: 使用 logenv_logger 提供不同级别的日志输出。

技术栈

  • 语言: Rust
  • CLI解析: clap
  • 并发: rayon
  • 哈希: sha2blake3
  • 日志: 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<T, E>? 操作符处理 I/O 等错误。
  8. 测试: 编写单元测试验证核心逻辑,编写集成测试模拟 CLI 调用。

先行任务: 设计核心数据结构(如用于存储文件信息的 structHashMap),并规划扫描和哈希算法的详细步骤。