[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6MVEZYHZ9521A3W83G4XNPH":3,"skill-same:01M6MVEZYHZ9521A3W83G4XNPH":99},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":49,"commitSha":50,"skillDirectory":51,"forksCount":52,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":55,"updatedAt":56,"install":57,"resources":70},"01M6MVEZYHZ9521A3W83G4XNPH","file-deduplicator",null,"Find and remove duplicate files intelligently. Save storage space, keep your system clean. Perfect for digital hoarders and document management.","Kernel8901\u002Fai-agent-skills-classification","Kernel8901","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F72647553?v=4","01M6KV388J2H5PNC8D8P940BJD","01M6KV38CS5B3AY63RKZB410YM",7,"MIT","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"file","file deduplicator","management","for","keep","duplicate","file-management","clean","document","files","remove","storage","find","system","save","disk","Tools","deduplication","cleanup","2026-11-10 10:12:30",false,"---\nname: file-deduplicator\ndescription: Find and remove duplicate files intelligently. Save storage space, keep your system clean. Perfect for digital hoarders and document management.\nmetadata:\n  {\n    \"openclaw\":\n      {\n        \"version\": \"1.0.0\",\n        \"author\": \"Vernox\",\n        \"license\": \"MIT\",\n        \"tags\": [\"deduplication\", \"storage\", \"cleanup\", \"file-management\", \"duplicate\", \"disk-space\"],\n        \"category\": \"tools\"\n      }\n  }\n---\n\n# File-Deduplicator - Find and Remove Duplicates\n\n**Vernox Utility Skill - Clean up your digital hoard.**\n\n## Overview\n\nFile-Deduplicator is an intelligent file duplicate finder and remover. Uses content hashing to identify identical files across directories, then provides options to remove duplicates safely.\n\n## Features\n\n### ✅ Duplicate Detection\n- Content-based hashing (MD5) for fast comparison\n- Size-based detection (exact match, near match)\n- Name-based detection (similar filenames)\n- Directory scanning (recursive)\n- Exclude patterns (.git, node_modules, etc.)\n\n### ✅ Removal Options\n- Auto-delete duplicates (keep newest\u002Foldest)\n- Interactive review before deletion\n- Move to archive instead of delete\n- Preserve permissions and metadata\n- Dry-run mode (preview changes)\n\n### ✅ Analysis Tools\n- Duplicate count summary\n- Space savings estimation\n- Largest duplicate files\n- Most common duplicate patterns\n- Detailed report generation\n\n### ✅ Safety Features\n- Confirmation prompts before deletion\n- Backup to archive folder\n- Size threshold (don't remove huge files by mistake)\n- Whitelist important directories\n- Undo functionality (log for recovery)\n\n## Installation\n\n```bash\nclawhub install file-deduplicator\n```\n\n## Quick Start\n\n### Find Duplicates in Directory\n\n```javascript\nconst result = await findDuplicates({\n  directories: ['.\u002Fdocuments', '.\u002Fdownloads', '.\u002Fprojects'],\n  options: {\n    method: 'content',  \u002F\u002F content-based comparison\n    includeSubdirs: true\n  }\n});\n\nconsole.log(`Found ${result.duplicateCount} duplicate groups`);\nconsole.log(`Potential space savings: ${result.spaceSaved}`);\n```\n\n### Remove Duplicates Automatically\n\n```javascript\nconst result = await removeDuplicates({\n  directories: ['.\u002Fdocuments', '.\u002Fdownloads'],\n  options: {\n    method: 'content',\n    keep: 'newest',  \u002F\u002F keep newest, delete oldest\n    action: 'delete',  \u002F\u002F or 'move' to archive\n    autoConfirm: false  \u002F\u002F show confirmation for each\n  }\n});\n\nconsole.log(`Removed ${result.filesRemoved} duplicates`);\nconsole.log(`Space saved: ${result.spaceSaved}`);\n```\n\n### Dry-Run Preview\n\n```javascript\nconst result = await removeDuplicates({\n  directories: ['.\u002Fdocuments', '.\u002Fdownloads'],\n  options: {\n    method: 'content',\n    keep: 'newest',\n    action: 'delete',\n    dryRun: true  \u002F\u002F Preview without actual deletion\n  }\n});\n\nconsole.log('Would remove:');\nresult.duplicates.forEach((dup, i) => {\n  console.log(`${i+1}. ${dup.file}`);\n});\n```\n\n## Tool Functions\n\n### `findDuplicates`\nFind duplicate files across directories.\n\n**Parameters:**\n- `directories` (array|string, required): Directory paths to scan\n- `options` (object, optional):\n  - `method` (string): 'content' | 'size' | 'name' - comparison method\n  - `includeSubdirs` (boolean): Scan recursively (default: true)\n  - `minSize` (number): Minimum size in bytes (default: 0)\n  - `maxSize` (number): Maximum size in bytes (default: 0)\n  - `excludePatterns` (array): Glob patterns to exclude (default: ['.git', 'node_modules'])\n  - `whitelist` (array): Directories to never scan (default: [])\n\n**Returns:**\n- `duplicates` (array): Array of duplicate groups\n  - `duplicateCount` (number): Number of duplicate groups found\n  - `totalFiles` (number): Total files scanned\n  - `scanDuration` (number): Time taken to scan (ms)\n  - `spaceWasted` (number): Total bytes wasted by duplicates\n  - `spaceSaved` (number): Potential savings if duplicates removed\n\n### `removeDuplicates`\nRemove duplicate files based on findings.\n\n**Parameters:**\n- `directories` (array|string, required): Same as findDuplicates\n- `options` (object, optional):\n  - `keep` (string): 'newest' | 'oldest' | 'smallest' | 'largest' - which to keep\n  - `action` (string): 'delete' | 'move' | 'archive'\n  - `archivePath` (string): Where to move files when action='move'\n  - `dryRun` (boolean): Preview without actual action\n  - `autoConfirm` (boolean): Auto-confirm deletions\n  - `sizeThreshold` (number): Don't remove files larger than this\n\n**Returns:**\n- `filesRemoved` (number): Number of files removed\u002Fmoved\n- `spaceSaved` (number): Bytes saved\n- `groupsProcessed` (number): Number of duplicate groups handled\n- `logPath` (string): Path to action log\n- `errors` (array): Any errors encountered\n\n### `analyzeDirectory`\nAnalyze a single directory for duplicates.\n\n**Parameters:**\n- `directory` (string, required): Path to directory\n- `options` (object, optional): Same as findDuplicates options\n\n**Returns:**\n- `fileCount` (number): Total files in directory\n- `totalSize` (number): Total bytes in directory\n- `duplicateSize` (number): Bytes in duplicate files\n- `duplicateRatio` (number): Percentage of files that are duplicates\n\n## Use Cases\n\n### Digital Hoarder Cleanup\n- Find duplicate photos\u002Fvideos\n- Identify wasted storage space\n- Remove old duplicates, keep newest\n- Clean up download folders\n\n### Document Management\n- Find duplicate PDFs, docs, reports\n- Keep latest version, archive old versions\n- Prevent version confusion\n- Reduce backup bloat\n\n### Project Cleanup\n- Find duplicate source files\n- Remove duplicate build artifacts\n- Clean up node_modules duplicates\n- Save storage on SSD\u002FHDD\n\n### Backup Optimization\n- Find duplicate backup files\n- Remove redundant backups\n- Identify what's actually duplicated\n- Save space on backup drives\n\n## Configuration\n\n### Edit `config.json`:\n```json\n{\n  \"detection\": {\n    \"defaultMethod\": \"content\",\n    \"sizeTolerancePercent\": 0,  \u002F\u002F exact match only\n    \"nameSimilarity\": 0.7,  \u002F\u002F 0-1, lower = more similar\n    \"includeSubdirs\": true\n  },\n  \"removal\": {\n    \"defaultAction\": \"delete\",\n    \"defaultKeep\": \"newest\",\n    \"archivePath\": \".\u002Farchive\",\n    \"sizeThreshold\": 10485760,  \u002F\u002F 10MB threshold\n    \"autoConfirm\": false,\n    \"dryRunDefault\": false\n  },\n  \"exclude\": {\n    \"patterns\": [\".git\", \"node_modules\", \".vscode\", \".idea\"],\n    \"whitelist\": [\"important\", \"work\", \"projects\"]\n  }\n}\n```\n\n## Methods\n\n### Content-Based (Recommended)\n- Fast MD5 hashing\n- Detects exact duplicates regardless of filename\n- Works across renamed files\n- Perfect for documents, code, archives\n\n### Size-Based\n- Compares file sizes\n- Faster than content hashing\n- Good for media files where content hashing is slow\n- Finds near-duplicates (similar but not exact)\n\n### Name-Based\n- Compares filenames\n- Detects similar named files\n- Good for finding version duplicates (file_v1, file_v2)\n\n## Examples\n\n### Find Duplicates in Documents\n```javascript\nconst result = await findDuplicates({\n  directories: '~\u002FDocuments',\n  options: {\n    method: 'content',\n    includeSubdirs: true\n  }\n});\n\nconsole.log(`Found ${result.duplicateCount} duplicate sets`);\nresult.duplicates.slice(0, 5).forEach((set, i) => {\n  console.log(`Set ${i+1}: ${set.files.length} files`);\n  console.log(`  Total size: ${set.totalSize} bytes`);\n});\n```\n\n### Remove Duplicates, Keep Newest\n```javascript\nconst result = await removeDuplicates({\n  directories: '~\u002FDocuments',\n  options: {\n    keep: 'newest',\n    action: 'delete'\n  }\n});\n\nconsole.log(`Removed ${result.filesRemoved} files`);\nconsole.log(`Saved ${result.spaceSaved} bytes`);\n```\n\n### Move to Archive Instead of Delete\n```javascript\nconst result = await removeDuplicates({\n  directories: '~\u002FDownloads',\n  options: {\n    keep: 'newest',\n    action: 'move',\n    archivePath: '~\u002FDocuments\u002FArchive'\n  }\n});\n\nconsole.log(`Archived ${result.filesRemoved} files`);\nconsole.log(`Safe in: ~\u002FDocuments\u002FArchive`);\n```\n\n### Dry-Run Preview Changes\n```javascript\nconst result = await removeDuplicates({\n  directories: '~\u002FDocuments',\n  options: {\n    dryRun: true  \u002F\u002F Just show what would happen\n  }\n});\n\nconsole.log('=== Dry Run Preview ===');\nresult.duplicates.forEach((set, i) => {\n  console.log(`Would delete: ${set.toDelete.join(', ')}`);\n});\n```\n\n## Performance\n\n### Scanning Speed\n- **Small directories** (\u003C1000 files): \u003C1s\n- **Medium directories** (1000-10000 files): 1-5s\n- **Large directories** (10000+ files): 5-20s\n\n### Detection Accuracy\n- **Content-based:** 100% (exact duplicates)\n- **Size-based:** Fast but may miss renamed files\n- **Name-based:** Detects naming patterns only\n\n### Memory Usage\n- **Hash cache:** ~1MB per 100,000 files\n- **Batch processing:** Processes 1000 files at a time\n- **Peak memory:** ~200MB for 1M files\n\n## Safety Features\n\n### Size Thresholding\nWon't remove files larger than configurable threshold (default: 10MB). Prevents accidental deletion of important large files.\n\n### Archive Mode\nMove files to archive directory instead of deleting. No data loss, full recoverability.\n\n### Action Logging\nAll deletions\u002Fmoves are logged to file for recovery and audit.\n\n### Undo Functionality\nLog file can be used to restore accidentally deleted files (limited undo window).\n\n## Error Handling\n\n### Permission Errors\n- Clear error message\n- Suggest running with sudo\n- Skip files that can't be accessed\n\n### File Lock Errors\n- Detect locked files\n- Skip and report\n- Suggest closing applications using files\n\n### Space Errors\n- Check available disk space before deletion\n- Warn if space is critically low\n- Prevent disk-full scenarios\n\n## Troubleshooting\n\n### Not Finding Expected Duplicates\n- Check detection method (content vs size vs name)\n- Verify exclude patterns aren't too broad\n- Check if files are in whitelisted directories\n- Try with includeSubdirs: false\n\n### Deletion Not Working\n- Check write permissions on directories\n- Verify action isn't 'delete' with autoConfirm: true\n- Check size threshold isn't blocking all deletions\n- Check file locks (is another program using files?)\n\n### Slow Scanning\n- Reduce includeSubdirs scope\n- Use size-based detection (faster)\n- Exclude large directories (node_modules, .git)\n- Process directories individually instead of batch\n\n## Tips\n\n### Best Results\n- Use content-based detection for documents (100% accurate)\n- Run dry-run first to preview changes\n- Archive instead of delete for important files\n- Check logs if anything unexpected deleted\n\n### Performance Optimization\n- Process frequently used directories first\n- Use size threshold to skip large media files\n- Exclude hidden directories from scan\n- Process directories in parallel when possible\n\n### Space Management\n- Regular duplicate cleanup prevents storage bloat\n- Delete temp directories regularly\n- Clear download folders of installers\n- Empty trash before large scans\n\n## Roadmap\n\n- [ ] Duplicate detection by image similarity\n- [ ] Near-duplicate detection (similar but not exact)\n- [ ] Duplicate detection across network drives\n- [ ] Cloud storage integration (S3, Google Drive)\n- [ ] Automatic scheduling of scans\n- [ ] Heuristic duplicate detection (ML-based)\n- [ ] Recover deleted files from backup\n- [ ] Duplicate detection by file content similarity (not just hash)\n\n## License\n\nMIT\n\n---\n\n**Find duplicates. Save space. Keep your system clean.** ?\n","# File-Deduplicator - Find and Remove Duplicates\n\n**Vernox Utility Skill - Clean up your digital hoard.**\n\n## Overview\n\nFile-Deduplicator is an intelligent file duplicate finder and remover. Uses content hashing to identify identical files across directories, then provides options to remove duplicates safely.\n\n## Features\n\n### ✅ Duplicate Detection\n- Content-based hashing (MD5) for fast comparison\n- Size-based detection (exact match, near match)\n- Name-based detection (similar filenames)\n- Directory scanning (recursive)\n- Exclude patterns (.git, node_modules, etc.)\n\n### ✅ Removal Options\n- Auto-delete duplicates (keep newest\u002Foldest)\n- Interactive review before deletion\n- Move to archive instead of delete\n- Preserve permissions and metadata\n- Dry-run mode (preview changes)\n\n### ✅ Analysis Tools\n- Duplicate count summary\n- Space savings estimation\n- Largest duplicate files\n- Most common duplicate patterns\n- Detailed report generation\n\n### ✅ Safety Features\n- Confirmation prompts before deletion\n- Backup to archive folder\n- Size threshold (don't remove huge files by mistake)\n- Whitelist important directories\n- Undo functionality (log for recovery)\n\n## Installation\n\n```bash\nclawhub install file-deduplicator\n```\n\n## Quick Start\n\n### Find Duplicates in Directory\n\n```javascript\nconst result = await findDuplicates({\n  directories: ['.\u002Fdocuments', '.\u002Fdownloads', '.\u002Fprojects'],\n  options: {\n    method: 'content',  \u002F\u002F content-based comparison\n    includeSubdirs: true\n  }\n});\n\nconsole.log(`Found ${result.duplicateCount} duplicate groups`);\nconsole.log(`Potential space savings: ${result.spaceSaved}`);\n```\n\n### Remove Duplicates Automatically\n\n```javascript\nconst result = await removeDuplicates({\n  directories: ['.\u002Fdocuments', '.\u002Fdownloads'],\n  options: {\n    method: 'content',\n    keep: 'newest',  \u002F\u002F keep newest, delete oldest\n    action: 'delete',  \u002F\u002F or 'move' to archive\n    autoConfirm: false  \u002F\u002F show confirmation for each\n  }\n});\n\nconsole.log(`Removed ${result.filesRemoved} duplicates`);\nconsole.log(`Space saved: ${result.spaceSaved}`);\n```\n\n### Dry-Run Preview\n\n```javascript\nconst result = await removeDuplicates({\n  directories: ['.\u002Fdocuments', '.\u002Fdownloads'],\n  options: {\n    method: 'content',\n    keep: 'newest',\n    action: 'delete',\n    dryRun: true  \u002F\u002F Preview without actual deletion\n  }\n});\n\nconsole.log('Would remove:');\nresult.duplicates.forEach((dup, i) => {\n  console.log(`${i+1}. ${dup.file}`);\n});\n```\n\n## Tool Functions\n\n### `findDuplicates`\nFind duplicate files across directories.\n\n**Parameters:**\n- `directories` (array|string, required): Directory paths to scan\n- `options` (object, optional):\n  - `method` (string): 'content' | 'size' | 'name' - comparison method\n  - `includeSubdirs` (boolean): Scan recursively (default: true)\n  - `minSize` (number): Minimum size in bytes (default: 0)\n  - `maxSize` (number): Maximum size in bytes (default: 0)\n  - `excludePatterns` (array): Glob patterns to exclude (default: ['.git', 'node_modules'])\n  - `whitelist` (array): Directories to never scan (default: [])\n\n**Returns:**\n- `duplicates` (array): Array of duplicate groups\n  - `duplicateCount` (number): Number of duplicate groups found\n  - `totalFiles` (number): Total files scanned\n  - `scanDuration` (number): Time taken to scan (ms)\n  - `spaceWasted` (number): Total bytes wasted by duplicates\n  - `spaceSaved` (number): Potential savings if duplicates removed\n\n### `removeDuplicates`\nRemove duplicate files based on findings.\n\n**Parameters:**\n- `directories` (array|string, required): Same as findDuplicates\n- `options` (object, optional):\n  - `keep` (string): 'newest' | 'oldest' | 'smallest' | 'largest' - which to keep\n  - `action` (string): 'delete' | 'move' | 'archive'\n  - `archivePath` (string): Where to move files when action='move'\n  - `dryRun` (boolean): Preview without actual action\n  - `autoConfirm` (boolean): Auto-confirm deletions\n  - `sizeThreshold` (number): Don't remove files larger than this\n\n**Returns:**\n- `filesRemoved` (number): Number of files removed\u002Fmoved\n- `spaceSaved` (number): Bytes saved\n- `groupsProcessed` (number): Number of duplicate groups handled\n- `logPath` (string): Path to action log\n- `errors` (array): Any errors encountered\n\n### `analyzeDirectory`\nAnalyze a single directory for duplicates.\n\n**Parameters:**\n- `directory` (string, required): Path to directory\n- `options` (object, optional): Same as findDuplicates options\n\n**Returns:**\n- `fileCount` (number): Total files in directory\n- `totalSize` (number): Total bytes in directory\n- `duplicateSize` (number): Bytes in duplicate files\n- `duplicateRatio` (number): Percentage of files that are duplicates\n\n## Use Cases\n\n### Digital Hoarder Cleanup\n- Find duplicate photos\u002Fvideos\n- Identify wasted storage space\n- Remove old duplicates, keep newest\n- Clean up download folders\n\n### Document Management\n- Find duplicate PDFs, docs, reports\n- Keep latest version, archive old versions\n- Prevent version confusion\n- Reduce backup bloat\n\n### Project Cleanup\n- Find duplicate source files\n- Remove duplicate build artifacts\n- Clean up node_modules duplicates\n- Save storage on SSD\u002FHDD\n\n### Backup Optimization\n- Find duplicate backup files\n- Remove redundant backups\n- Identify what's actually duplicated\n- Save space on backup drives\n\n## Configuration\n\n### Edit `config.json`:\n```json\n{\n  \"detection\": {\n    \"defaultMethod\": \"content\",\n    \"sizeTolerancePercent\": 0,  \u002F\u002F exact match only\n    \"nameSimilarity\": 0.7,  \u002F\u002F 0-1, lower = more similar\n    \"includeSubdirs\": true\n  },\n  \"removal\": {\n    \"defaultAction\": \"delete\",\n    \"defaultKeep\": \"newest\",\n    \"archivePath\": \".\u002Farchive\",\n    \"sizeThreshold\": 10485760,  \u002F\u002F 10MB threshold\n    \"autoConfirm\": false,\n    \"dryRunDefault\": false\n  },\n  \"exclude\": {\n    \"patterns\": [\".git\", \"node_modules\", \".vscode\", \".idea\"],\n    \"whitelist\": [\"important\", \"work\", \"projects\"]\n  }\n}\n```\n\n## Methods\n\n### Content-Based (Recommended)\n- Fast MD5 hashing\n- Detects exact duplicates regardless of filename\n- Works across renamed files\n- Perfect for documents, code, archives\n\n### Size-Based\n- Compares file sizes\n- Faster than content hashing\n- Good for media files where content hashing is slow\n- Finds near-duplicates (similar but not exact)\n\n### Name-Based\n- Compares filenames\n- Detects similar named files\n- Good for finding version duplicates (file_v1, file_v2)\n\n## Examples\n\n### Find Duplicates in Documents\n```javascript\nconst result = await findDuplicates({\n  directories: '~\u002FDocuments',\n  options: {\n    method: 'content',\n    includeSubdirs: true\n  }\n});\n\nconsole.log(`Found ${result.duplicateCount} duplicate sets`);\nresult.duplicates.slice(0, 5).forEach((set, i) => {\n  console.log(`Set ${i+1}: ${set.files.length} files`);\n  console.log(`  Total size: ${set.totalSize} bytes`);\n});\n```\n\n### Remove Duplicates, Keep Newest\n```javascript\nconst result = await removeDuplicates({\n  directories: '~\u002FDocuments',\n  options: {\n    keep: 'newest',\n    action: 'delete'\n  }\n});\n\nconsole.log(`Removed ${result.filesRemoved} files`);\nconsole.log(`Saved ${result.spaceSaved} bytes`);\n```\n\n### Move to Archive Instead of Delete\n```javascript\nconst result = await removeDuplicates({\n  directories: '~\u002FDownloads',\n  options: {\n    keep: 'newest',\n    action: 'move',\n    archivePath: '~\u002FDocuments\u002FArchive'\n  }\n});\n\nconsole.log(`Archived ${result.filesRemoved} files`);\nconsole.log(`Safe in: ~\u002FDocuments\u002FArchive`);\n```\n\n### Dry-Run Preview Changes\n```javascript\nconst result = await removeDuplicates({\n  directories: '~\u002FDocuments',\n  options: {\n    dryRun: true  \u002F\u002F Just show what would happen\n  }\n});\n\nconsole.log('=== Dry Run Preview ===');\nresult.duplicates.forEach((set, i) => {\n  console.log(`Would delete: ${set.toDelete.join(', ')}`);\n});\n```\n\n## Performance\n\n### Scanning Speed\n- **Small directories** (\u003C1000 files): \u003C1s\n- **Medium directories** (1000-10000 files): 1-5s\n- **Large directories** (10000+ files): 5-20s\n\n### Detection Accuracy\n- **Content-based:** 100% (exact duplicates)\n- **Size-based:** Fast but may miss renamed files\n- **Name-based:** Detects naming patterns only\n\n### Memory Usage\n- **Hash cache:** ~1MB per 100,000 files\n- **Batch processing:** Processes 1000 files at a time\n- **Peak memory:** ~200MB for 1M files\n\n## Safety Features\n\n### Size Thresholding\nWon't remove files larger than configurable threshold (default: 10MB). Prevents accidental deletion of important large files.\n\n### Archive Mode\nMove files to archive directory instead of deleting. No data loss, full recoverability.\n\n### Action Logging\nAll deletions\u002Fmoves are logged to file for recovery and audit.\n\n### Undo Functionality\nLog file can be used to restore accidentally deleted files (limited undo window).\n\n## Error Handling\n\n### Permission Errors\n- Clear error message\n- Suggest running with sudo\n- Skip files that can't be accessed\n\n### File Lock Errors\n- Detect locked files\n- Skip and report\n- Suggest closing applications using files\n\n### Space Errors\n- Check available disk space before deletion\n- Warn if space is critically low\n- Prevent disk-full scenarios\n\n## Troubleshooting\n\n### Not Finding Expected Duplicates\n- Check detection method (content vs size vs name)\n- Verify exclude patterns aren't too broad\n- Check if files are in whitelisted directories\n- Try with includeSubdirs: false\n\n### Deletion Not Working\n- Check write permissions on directories\n- Verify action isn't 'delete' with autoConfirm: true\n- Check size threshold isn't blocking all deletions\n- Check file locks (is another program using files?)\n\n### Slow Scanning\n- Reduce includeSubdirs scope\n- Use size-based detection (faster)\n- Exclude large directories (node_modules, .git)\n- Process directories individually instead of batch\n\n## Tips\n\n### Best Results\n- Use content-based detection for documents (100% accurate)\n- Run dry-run first to preview changes\n- Archive instead of delete for important files\n- Check logs if anything unexpected deleted\n\n### Performance Optimization\n- Process frequently used directories first\n- Use size threshold to skip large media files\n- Exclude hidden directories from scan\n- Process directories in parallel when possible\n\n### Space Management\n- Regular duplicate cleanup prevents storage bloat\n- Delete temp directories regularly\n- Clear download folders of installers\n- Empty trash before large scans\n\n## Roadmap\n\n- [ ] Duplicate detection by image similarity\n- [ ] Near-duplicate detection (similar but not exact)\n- [ ] Duplicate detection across network drives\n- [ ] Cloud storage integration (S3, Google Drive)\n- [ ] Automatic scheduling of scans\n- [ ] Heuristic duplicate detection (ML-based)\n- [ ] Recover deleted files from backup\n- [ ] Duplicate detection by file content similarity (not just hash)\n\n## License\n\nMIT\n\n---\n\n**Find duplicates. Save space. Keep your system clean.** ?\n",{"name":5,"metadata":42,"description":7},{"openclaw":43},{"tags":44,"author":46,"license":14,"version":47,"category":48},[35,29,36,24,23,45],"disk-space","Vernox","1.0.0","tools","main","f4cb2d49f7667e79ef7804f50396d5aaffdf1f56","PDF及文件\u002Ffile-deduplicator",1,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification","https:\u002F\u002Fgithub.com\u002FKernel8901","a little little little dobe in life but science geek","2026-04-05 16:43:56",{"source":8,"skillName":5,"commands":58,"prompt":68,"zipAvailable":69},[59,62,65],{"tool":60,"command":61},"npx","npx skills add Kernel8901\u002Fai-agent-skills-classification --skill file-deduplicator",{"tool":63,"command":64},"bunx","bunx skills add Kernel8901\u002Fai-agent-skills-classification --skill file-deduplicator",{"tool":66,"command":67},"pnpm","pnpm dlx skills add Kernel8901\u002Fai-agent-skills-classification --skill file-deduplicator","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002FSKILL.md",true,[71,77,81,87,91,95],{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"_meta.json","REFERENCE","参考文档",294,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002F_meta.json",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"config.json",726,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002Fconfig.json",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"index.js","SCRIPT","脚本",17911,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002Findex.js",{"path":88,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":89,"sourceHtmlUrl":90},"package.json",407,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002Fpackage.json",{"path":92,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":93,"sourceHtmlUrl":94},"README.md",6721,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002FREADME.md",{"path":96,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":97,"sourceHtmlUrl":98},"test.js",2528,"https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002FPDF及文件\u002Ffile-deduplicator\u002Ftest.js",[100,124,160,171,181,210],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":37},"01M6Q5R6WZ06RRB9RQTW54B34B","zyfai","Earn yield on any Ethereum wallet on Base, Arbitrum, and Plasma. Use when a user wants passive DeFi yield on their funds. Deploys a non-custodial subaccount (Safe) linked to their EOA, enables automated yield optimization, and lets them deposit\u002Fwithdraw anytime.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzyfai-sdk\u002FSKILL.md",[],[102,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123],"safe","ethereum","defi","Optimization","user","use","Wallet","base","deposit","withdraw","yield","arbitrum","non-custodial","passive","defi yield","earn","yield optimization",{"skillNo":125,"name":126,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":142,"publishedAt":37},"01M6Q5R337B5JSNER4P4YS03TN","zerion-api","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api\u002FSKILL.md",[129,134,137],{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":135,"categoryName":136,"taxonomyType":132,"taxonomyTypeDesc":133},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":138,"categoryName":139,"taxonomyType":140,"taxonomyTypeDesc":141},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[143,144,145,146,147,148,149,109,150,113,151,152,153,154,155,156,157,158,159],"api","zerion api","zerion","MCP","mcp server","server","blockchain","transactions","crypto wallet","crypto","evm","solana","query","across","positions","token","prices",{"skillNo":161,"name":162,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":168,"publishedAt":37},"01M6Q5QZFYTDAZMZ27BN5VZXAR","zerion-api-skill","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-skill\u002FSKILL.md",[165,166,167],{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},{"categoryNo":135,"categoryName":136,"taxonomyType":132,"taxonomyTypeDesc":133},{"categoryNo":138,"categoryName":139,"taxonomyType":140,"taxonomyTypeDesc":141},[143,169,170,144,145,146,147,148,149,109,150,113,152,153,154,155,156,157,158,159],"api skill","zerion api skill",{"skillNo":172,"name":173,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":179,"publishedAt":37},"01M6Q5QW17QW98RA3FE45E4RD8","zerion-api-mcp","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fzerion-api-mcp\u002FSKILL.md",[176,177,178],{"categoryNo":130,"categoryName":131,"taxonomyType":132,"taxonomyTypeDesc":133},{"categoryNo":135,"categoryName":136,"taxonomyType":132,"taxonomyTypeDesc":133},{"categoryNo":138,"categoryName":139,"taxonomyType":140,"taxonomyTypeDesc":141},[146,143,180,144,145,147,148,109,150,113,151,152,153,154,155,156,157,158,159],"zerion api mcp",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":190,"publishedAt":37},"01M6Q5QQYZB7A501BDEQWKGSJT","yahoo-finance-forex","Fetches real-time FOREX news and market data from Yahoo Finance for major currency pairs (EUR\u002FUSD, GBP\u002FUSD, USD\u002FJPY, etc.). Analyzes sentiment and provides trading context.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-forex\u002FSKILL.md",[187],{"categoryNo":188,"categoryName":189,"taxonomyType":140,"taxonomyTypeDesc":141},"01JBSEEDCAT000000000000040","财务",[191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,21],"finance","yahoo finance","forex","yahoo","yahoo finance forex","github","https","sentiment","real-time","python3","install","Market","usd","news","time","currency","gbp","pip","market data",{"skillNo":211,"name":212,"nameZh":6,"description":213,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":214,"categories":215,"keywords":217,"publishedAt":37},"01M6Q5QM6VS84WZVM7BKXXPF32","yahoo-finance","This skill should be used when the user asks to \"get stock prices\", \"check stock quotes\", \"look up earnings\", \"get financial data\", \"find trending stocks\", or needs stock market data from Yahoo Finance.","https:\u002F\u002Fgithub.com\u002FKernel8901\u002Fai-agent-skills-classification\u002Fblob\u002Fmain\u002F金融\u002Fyahoo-finance-cli\u002FSKILL.md",[216],{"categoryNo":188,"categoryName":189,"taxonomyType":140,"taxonomyTypeDesc":141},[191,192,194,218,219,30,220,221,222,202,223,224,225,226,227,228,229,230,159,209],"cli","homebrew","check","brew","up","local","get","stock","link","trending","sf","quotes","ln"]