# dedup **Repository Path**: ationlove/dedup ## Basic Information - **Project Name**: dedup - **Description**: go 语言开发的一款 CLI,名叫:dedup,deduplication(去重)的缩写。 功能:用来删除指定文件夹下的重复文件,多个文件重复,只保留一份。 - **Primary Language**: Go - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-10 - **Last Updated**: 2026-02-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dedup 文件去重 CLI 工具,用于查找并删除指定目录下的重复文件。 ## 功能特点 - **智能去重**:先按文件大小分组,再通过哈希算法确保文件完全相同 - **多种哈希方法**:支持 MD5、CRC32 或两者组合 - **高效性能**:通过大小预筛选,避免不必要的哈希计算 - **安全确认**:显示详细的重复文件清单,用户确认后才删除 - **灵活过滤**:支持按文件后缀名过滤 - **递归处理**:可选择是否递归处理子目录 ## 安装 ```bash go build -o dedup.exe . ``` ## 使用方法 ### 基本语法 ```bash dedup [选项] ``` ### 选项 | 选项 | 说明 | |------|------| | `-dir` | 要扫描的目录(默认:当前目录 `.`) | | `-t` | 文件类型过滤,如 `.mp3` 或 `.mp3|.jpg|.png` | | `-r` | 递归处理子目录(默认:只处理当前目录) | | `-m` | 哈希方法:`all`(同时使用MD5和CRC32,默认)、`md5`、`crc32` | | `-y` | 跳过确认,直接删除重复文件 | ### 使用示例 ```bash # 扫描当前目录,查找重复文件(默认使用 MD5 和 CRC32) ./dedup.exe # 扫描指定目录 ./dedup.exe -dir "C:\Users\user\Documents" # 只使用 CRC32 进行哈希比较(速度更快) ./dedup.exe -m crc32 -dir "./data" # 只使用 MD5 进行哈希比较 ./dedup.exe -m md5 -dir "./documents" # 只处理 .mp3 文件 ./dedup.exe -t ".mp3" -dir "./music" # 处理多种文件类型,使用 CRC32 哈希 ./dedup.exe -t ".mp3|.flac|.wav" -m crc32 -dir "./music" # 递归处理当前目录及所有子目录 ./dedup.exe -r # 递归处理指定目录的图片文件,自动删除无需确认 ./dedup.exe -r -t ".jpg|.png|.gif" -dir "./photos" -y # 组合使用:递归、类型过滤、哈希方法、自动删除 ./dedup.exe -r -t ".mp3|.flac" -m md5 -dir "./music" -y ``` ## 工作原理 1. **扫描文件**:遍历目录收集文件信息 2. **大小分组**:按文件大小分组,不同大小的文件不可能重复 3. **哈希计算**:对大小相同的文件计算哈希(根据 `-m` 选项选择 MD5、CRC32 或两者) 4. **确认重复**:哈希值相同的文件判定为重复 5. **选择保留**:每组重复文件中,保留路径最短的文件 6. **用户确认**:显示清单等待用户确认(`-y` 选项可跳过) 7. **执行删除**:删除多余的重复文件 ## 哈希方法说明 | 方法 | 说明 | 性能 | 准确性 | |------|------|------|--------| | `all`(默认) | 同时使用 MD5 和 CRC32 | 中等 | 最高 | | `md5` | 仅使用 MD5 | 中等 | 很高 | | `crc32` | 仅使用 CRC32 | 最快 | 高(有极小概率碰撞) | > **注意**:CRC32 虽然速度快,但存在理论上的哈希碰撞可能。对于大多数场景,CRC32 已足够安全。如需绝对保证,建议使用 `all` 或 `md5`。 ## 输出示例 ``` 正在扫描目录: ./music 过滤文件类型: .mp3 找到 150 个文件 按大小分组后: 5 组 发现 3 组重复文件: [1] 文件大小: 5.23 MB, MD5: a3f5b8c9d2e1f4a6... [✓] ./music/song1.mp3 [×] ./music/backup/song1_copy.mp3 → 将删除 1 个重复文件 [2] 文件大小: 3.45 MB, MD5: b2c4d6e8f0a1... [✓] ./music/album/song2.mp3 [×] ./music/downloads/song2.mp3 [×] ./music/backup/song2_copy.mp3 → 将删除 2 个重复文件 确认删除标记的文件吗? (y/n) > y ✓ 已删除: ./music/backup/song1_copy.mp3 ✓ 已删除: ./music/downloads/song2.mp3 ✓ 已删除: ./music/backup/song2_copy.mp3 ✓ 成功删除 3 个重复文件 ``` ## 注意事项 - **数据安全**:删除操作不可逆,建议先备份重要数据 - **隐藏文件**:默认跳过以 `.` 开头的隐藏文件 - **符号链接**:自动跳过符号链接,避免重复计数 - **保留规则**:路径较短的文件优先保留(通常是更原名的位置) ## License MIT