目录

osu-slim

osu! Songs 文件夹清理工具 — 去重 + 清理未游玩/未收藏铺面。

功能特性

  • 智能去重(始终运行)
    • A 型文件夹:基于 BeatmapSetID 去重
    • B 型文件夹:基于 .osu 文件 MD5 哈希去重
  • 删除未游玩铺面:清理指定日期前添加且从未游玩的铺面
  • 删除未收藏铺面:清理指定日期前添加且未加入任何收藏夹的铺面
  • osu!.db 加速:优先从 osu!.db 读取元数据,无需逐个解析 .osu 文件
  • 安全操作:默认预览模式,删除前二次确认

工作原理

扫描策略

工具会自动检测 osu! 根目录下的 osu!.dbSongs 文件夹:

  • 有 osu!.db:直接从数据库读取 BeatmapSetID、MD5、游玩记录等元数据,仅需 stat .osu 文件获取修改时间。磁盘上存在但数据库中没有的文件夹会回退到文件扫描。
  • 无 osu!.db:回退到并发扫描模式,逐个解析 .osu 文件(仅读前 50 行)。

去重逻辑

  • A 型(BeatmapSetID > 0):相同 ID 的文件夹保留 .osu 文件最新的,删除其余
  • B 型(BeatmapSetID = 0):相同哈希集合的文件夹保留最新的,删除其余

铺面添加时间

使用文件夹内 .osu 文件的最新修改时间作为铺面添加时间(非文件夹自身时间)。

安装

go build -o osu-slim .

使用方法

osu-slim -path=/path/to/osu! [选项]

参数

参数 默认值 说明
-path (必需) osu! 根目录路径(包含 Songs 文件夹和 osu!.db 的目录)
-dry-run true 预览模式,不实际删除
-delete-unplayed 删除该日期前添加的未游玩铺面(格式:YYYY-MM-DD
-delete-uncollected 删除该日期前添加的未收藏铺面(格式:YYYY-MM-DD

-delete-unplayed 需要 osu!.db-delete-uncollected 还需要 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       未游玩/未收藏铺面清理

安全建议

  1. 首次使用先用预览模式查看结果
  2. 删除前备份重要铺面
  3. 实际删除时工具会要求二次确认

许可证

MIT License

免责声明

使用本工具前请备份重要数据。作者不对因使用本工具造成的任何数据丢失负责。

关于
4.4 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号