OA0 = Omni AI 0
OA0 是一个探索 AI 的论坛
现在注册
已注册用户请  登录
OA0  ›  技能包  ›  file-deduplicator:智能寻找并移除系统中的重复文件

file-deduplicator:智能寻找并移除系统中的重复文件

 
  saas ·  2026-02-24 00:59:13 · 2 次点击  · 0 条评论  

名称: file-deduplicator
描述: 智能查找并移除重复文件。节省存储空间,保持系统整洁。非常适合数字囤积者和文档管理。
元数据:
{
"openclaw":
{
"version": "1.0.0",
"author": "Vernox",
"license": "MIT",
"tags": ["去重", "存储", "清理", "文件管理", "重复", "磁盘空间"],
"category": "工具"
}
}


文件去重器 - 查找并移除重复项

Vernox 实用工具技能 - 清理你的数字囤积物。

概述

文件去重器是一个智能的文件重复项查找与移除工具。它使用内容哈希来识别跨目录的相同文件,并提供安全移除重复项的选项。

功能特性

✅ 重复检测

  • 基于内容的哈希(MD5)快速比较
  • 基于大小的检测(精确匹配、近似匹配)
  • 基于名称的检测(相似文件名)
  • 目录扫描(递归)
  • 排除模式(.git、node_modules 等)

✅ 移除选项

  • 自动删除重复项(保留最新/最旧)
  • 删除前交互式审查
  • 移动到归档而非删除
  • 保留权限和元数据
  • 试运行模式(预览更改)

✅ 分析工具

  • 重复项数量统计
  • 空间节省预估
  • 最大的重复文件
  • 最常见的重复模式
  • 生成详细报告

✅ 安全特性

  • 删除前确认提示
  • 备份到归档文件夹
  • 大小阈值(防止误删大文件)
  • 白名单保护重要目录
  • 撤销功能(恢复日志)

安装

clawhub install file-deduplicator

快速开始

在目录中查找重复项

const result = await findDuplicates({
  directories: ['./documents', './downloads', './projects'],
  options: {
    method: 'content',  // 基于内容的比较
    includeSubdirs: true
  }
});

console.log(`找到 ${result.duplicateCount} 组重复项`);
console.log(`潜在节省空间:${result.spaceSaved}`);

自动移除重复项

const result = await removeDuplicates({
  directories: ['./documents', './downloads'],
  options: {
    method: 'content',
    keep: 'newest',  // 保留最新的,删除最旧的
    action: 'delete',  // 或 'move' 到归档
    autoConfirm: false  // 对每个操作显示确认
  }
});

console.log(`移除了 ${result.filesRemoved} 个重复文件`);
console.log(`节省空间:${result.spaceSaved}`);

试运行预览

const result = await removeDuplicates({
  directories: ['./documents', './downloads'],
  options: {
    method: 'content',
    keep: 'newest',
    action: 'delete',
    dryRun: true  // 仅预览,不实际执行
  }
});

console.log('将移除:');
result.duplicates.forEach((dup, i) => {
  console.log(`${i+1}. ${dup.file}`);
});

工具函数

findDuplicates

查找跨目录的重复文件。

参数:
- directories (数组|字符串, 必需):要扫描的目录路径
- options (对象, 可选):
- method (字符串):'content' | 'size' | 'name' - 比较方法
- includeSubdirs (布尔值):递归扫描(默认:true)
- minSize (数字):最小文件大小(字节,默认:0)
- maxSize (数字):最大文件大小(字节,默认:0)
- excludePatterns (数组):要排除的 glob 模式(默认:['.git', 'node_modules'])
- whitelist (数组):永不扫描的目录(默认:[])

返回值:
- duplicates (数组):重复文件组的数组
- duplicateCount (数字):找到的重复组数量
- totalFiles (数字):扫描的文件总数
- scanDuration (数字):扫描耗时(毫秒)
- spaceWasted (数字):重复文件浪费的总字节数
- spaceSaved (数字):移除重复项后潜在节省的字节数

removeDuplicates

根据查找结果移除重复文件。

参数:
- directories (数组|字符串, 必需):同 findDuplicates
- options (对象, 可选):
- keep (字符串):'newest' | 'oldest' | 'smallest' | 'largest' - 保留哪个文件
- action (字符串):'delete' | 'move' | 'archive'
- archivePath (字符串):当 action='move' 时,文件移动的目标路径
- dryRun (布尔值):仅预览,不实际执行
- autoConfirm (布尔值):自动确认删除
- sizeThreshold (数字):不删除大于此阈值的文件

返回值:
- filesRemoved (数字):移除/移动的文件数量
- spaceSaved (数字):节省的字节数
- groupsProcessed (数字):处理的重复组数量
- logPath (字符串):操作日志的路径
- errors (数组):遇到的任何错误

analyzeDirectory

分析单个目录中的重复项。

参数:
- directory (字符串, 必需):目录路径
- options (对象, 可选):同 findDuplicates 的选项

返回值:
- fileCount (数字):目录中的文件总数
- totalSize (数字):目录中的总字节数
- duplicateSize (数字):重复文件占用的字节数
- duplicateRatio (数字):重复文件所占的百分比

使用场景

数字囤积者清理

  • 查找重复的照片/视频
  • 识别浪费的存储空间
  • 移除旧重复项,保留最新的
  • 清理下载文件夹

文档管理

  • 查找重复的 PDF、文档、报告
  • 保留最新版本,归档旧版本
  • 防止版本混淆
  • 减少备份冗余

项目清理

  • 查找重复的源文件
  • 移除重复的构建产物
  • 清理 node_modules 中的重复项
  • 节省 SSD/HDD 存储空间

备份优化

  • 查找重复的备份文件
  • 移除冗余备份
  • 识别实际重复的内容
  • 节省备份驱动器空间

配置

编辑 config.json

{
  "detection": {
    "defaultMethod": "content",
    "sizeTolerancePercent": 0,  // 仅精确匹配
    "nameSimilarity": 0.7,  // 0-1,值越低表示越相似
    "includeSubdirs": true
  },
  "removal": {
    "defaultAction": "delete",
    "defaultKeep": "newest",
    "archivePath": "./archive",
    "sizeThreshold": 10485760,  // 10MB 阈值
    "autoConfirm": false,
    "dryRunDefault": false
  },
  "exclude": {
    "patterns": [".git", "node_modules", ".vscode", ".idea"],
    "whitelist": ["important", "work", "projects"]
  }
}

检测方法

基于内容(推荐)

  • 快速的 MD5 哈希计算
  • 无论文件名如何,都能检测到完全相同的文件
  • 适用于重命名的文件
  • 对文档、代码、归档文件效果最佳

基于大小

  • 比较文件大小
  • 比内容哈希更快
  • 适用于内容哈希较慢的媒体文件
  • 可发现近似重复项(相似但不完全相同)

基于名称

  • 比较文件名
  • 检测名称相似的文件
  • 适用于查找版本重复项(如 file_v1, file_v2)

示例

在文档中查找重复项

const result = await findDuplicates({
  directories: '~/Documents',
  options: {
    method: 'content',
    includeSubdirs: true
  }
});

console.log(`找到 ${result.duplicateCount} 组重复项`);
result.duplicates.slice(0, 5).forEach((set, i) => {
  console.log(`第 ${i+1} 组:${set.files.length} 个文件`);
  console.log(`  总大小:${set.totalSize} 字节`);
});

移除重复项,保留最新的

const result = await removeDuplicates({
  directories: '~/Documents',
  options: {
    keep: 'newest',
    action: 'delete'
  }
});

console.log(`移除了 ${result.filesRemoved} 个文件`);
console.log(`节省了 ${result.spaceSaved} 字节`);

移动到归档而非删除

const result = await removeDuplicates({
  directories: '~/Downloads',
  options: {
    keep: 'newest',
    action: 'move',
    archivePath: '~/Documents/Archive'
  }
});

console.log(`归档了 ${result.filesRemoved} 个文件`);
console.log(`安全存放于:~/Documents/Archive`);

试运行预览更改

const result = await removeDuplicates({
  directories: '~/Documents',
  options: {
    dryRun: true  // 仅显示将要执行的操作
  }
});

console.log('=== 试运行预览 ===');
result.duplicates.forEach((set, i) => {
  console.log(`将删除:${set.toDelete.join(', ')}`);
});

性能

扫描速度

  • 小目录 (<1000 文件):<1秒
  • 中等目录 (1000-10000 文件):1-5秒
  • 大目录 (10000+ 文件):5-20秒

检测准确率

  • 基于内容: 100%(精确重复)
  • 基于大小: 快速,但可能遗漏重命名的文件
  • 基于名称: 仅检测命名模式

内存使用

  • 哈希缓存: 约每 100,000 个文件 1MB
  • 批处理: 每次处理 1000 个文件
  • 峰值内存: 处理 100 万个文件时约 200MB

安全特性

大小阈值

不会删除大于可配置阈值(默认:10MB)的文件。防止意外删除重要的大文件。

归档模式

将文件移动到归档目录而非删除。无数据丢失,完全可恢复。

操作日志

所有删除/移动操作都会记录到文件中,便于恢复和审计。

撤销功能

可以使用日志文件恢复意外删除的文件(有限的撤销窗口)。

错误处理

权限错误

  • 清晰的错误信息
  • 建议使用 sudo 运行
  • 跳过无法访问的文件

文件锁定错误

  • 检测被锁定的文件
  • 跳过并报告
  • 建议关闭正在使用文件的应用程序

空间错误

  • 删除前检查可用磁盘空间
  • 空间严重不足时发出警告
  • 防止磁盘满的情况

故障排除

未找到预期的重复项

  • 检查检测方法(内容 vs 大小 vs 名称)
  • 确认排除模式没有过于宽泛
  • 检查文件是否在白名单目录中
  • 尝试设置 includeSubdirs: false

删除操作无效

  • 检查目录的写入权限
  • 确认 action 不是 'delete' 且 autoConfirm: true
  • 检查大小阈值是否阻止了所有删除
  • 检查文件锁(是否有其他程序正在使用文件?)

扫描缓慢

  • 缩小 includeSubdirs 的范围
  • 使用基于大小的检测(更快)
  • 排除大型目录(node_modules、.git)
  • 逐个处理目录,而非批量处理

技巧

最佳效果

  • 对文档使用基于内容的检测(100% 准确)
  • 先运行试运行以预览更改
  • 对重要文件使用归档而非删除
  • 如有意外删除,检查日志

性能优化

  • 先处理频繁使用的目录
  • 使用大小阈值跳过大型媒体文件
  • 从扫描中排除隐藏目录
  • 尽可能并行处理目录

空间管理

  • 定期清理重复项,防止存储膨胀
  • 定期清理临时目录
  • 清除下载文件夹中的安装程序
  • 在大规模扫描前清空回收站

路线图

  • [ ] 基于图像相似性的重复检测
  • [ ] 近似重复检测(相似但不完全相同)
  • [ ] 跨网络驱动器的重复检测
  • [ ] 云存储集成(S3、Google Drive)
  • [ ] 自动安排扫描计划
  • [ ] 启发式重复检测(基于机器学习)
  • [ ] 从备份中恢复已删除的文件
  • [ ] 基于文件内容相似性的重复检测(不仅仅是哈希)

许可证

MIT


查找重复项。节省空间。保持系统整洁。 🔮

2 次点击  ∙  0 人收藏  
登录后收藏  
目前尚无回复
0 条回复
About   ·   Help   ·    
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
Developed with Cursor