update
osu! Songs 文件夹清理工具 — 去重 + 清理未游玩/未收藏铺面。
BeatmapSetID
.osu
工具会自动检测 osu! 根目录下的 osu!.db 和 Songs 文件夹:
osu!.db
Songs
使用文件夹内 .osu 文件的最新修改时间作为铺面添加时间(非文件夹自身时间)。
go build -o osu-slim .
osu-slim -path=/path/to/osu! [选项]
-path
-dry-run
true
-delete-unplayed
YYYY-MM-DD
-delete-uncollected
-delete-unplayed 需要 osu!.db;-delete-uncollected 还需要 collection.db。
collection.db
# 预览去重结果 osu-slim -path="C:\osu!" # 预览 2024 年前添加的未游玩铺面 osu-slim -path="C:\osu!" -delete-unplayed=2024-01-01 # 预览 2024 年前添加的未收藏铺面 osu-slim -path="C:\osu!" -delete-uncollected=2024-01-01 # 实际执行删除(会要求确认) osu-slim -path="C:\osu!" -delete-unplayed=2024-01-01 -dry-run=false
Loading osu!.db from osu!\osu!.db Loaded 28771 beatmap entries (version 20260312) Scanning Songs folder: osu!\Songs Found 62 beatmap folders A-type folders (with BeatmapSetID): 61 B-type folders (without BeatmapSetID): 1 === Duplicate Analysis Results === Found 1 A-type duplicate groups and 0 B-type duplicate groups === Folders to be processed === --- A-type folders (BeatmapSetID based) --- BeatmapSetID 2468641: Keeping: 2468641 DJ SHARPNEL - STRANGEPROGRAM (modified: 2026-03-03 18:34:40) Would delete: 2468641 DJ SHARPNEL - STRANGEPROGRAM - 副本 (modified: 2026-03-03 18:34:40) Total duplicate folders to process: 1 === Unplayed Beatmaps (added before 2026-01-01) === Found 1 unplayed beatmap folders 1508244 Vivy (CV Yagi Kairi) - Sing My Pleasure (TV Size) (modified: 2021-09-18 12:03:32) Dry-run mode: No folders were actually deleted. To actually delete folders, run with -dry-run=false
main.go CLI 参数解析、流程编排 types.go 共享数据结构 binary.go 二进制读取器(ULEB128、osu! String 等) osudb.go osu!.db 解析器 collectiondb.go collection.db 解析器 scanner.go 扫描逻辑(osu!.db 优先 + 文件系统回退 + 并发) dedup.go 去重逻辑 cleanup.go 未游玩/未收藏铺面清理
MIT License
使用本工具前请备份重要数据。作者不对因使用本工具造成的任何数据丢失负责。
osu-slim
osu! Songs 文件夹清理工具 — 去重 + 清理未游玩/未收藏铺面。
功能特性
BeatmapSetID去重.osu文件 MD5 哈希去重工作原理
扫描策略
工具会自动检测 osu! 根目录下的
osu!.db和Songs文件夹:去重逻辑
铺面添加时间
使用文件夹内
.osu文件的最新修改时间作为铺面添加时间(非文件夹自身时间)。安装
使用方法
参数
-pathSongs文件夹和osu!.db的目录)-dry-runtrue-delete-unplayedYYYY-MM-DD)-delete-uncollectedYYYY-MM-DD)示例
输出示例
项目结构
安全建议
许可证
MIT License
免责声明
使用本工具前请备份重要数据。作者不对因使用本工具造成的任何数据丢失负责。