名称: file-deduplicator
描述: 智能查找并移除重复文件。节省存储空间,保持系统整洁。非常适合数字囤积者和文档管理。
元数据:
{
"openclaw":
{
"version": "1.0.0",
"author": "Vernox",
"license": "MIT",
"tags": ["去重", "存储", "清理", "文件管理", "重复", "磁盘空间"],
"category": "工具"
}
}
Vernox 实用工具技能 - 清理你的数字囤积物。
文件去重器是一个智能的文件重复项查找与移除工具。它使用内容哈希来识别跨目录的相同文件,并提供安全移除重复项的选项。
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 (数字):重复文件所占的百分比
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"]
}
}
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(', ')}`);
});
不会删除大于可配置阈值(默认:10MB)的文件。防止意外删除重要的大文件。
将文件移动到归档目录而非删除。无数据丢失,完全可恢复。
所有删除/移动操作都会记录到文件中,便于恢复和审计。
可以使用日志文件恢复意外删除的文件(有限的撤销窗口)。
includeSubdirs: falseaction 不是 'delete' 且 autoConfirm: trueincludeSubdirs 的范围MIT
查找重复项。节省空间。保持系统整洁。 🔮