Install
openclaw skills install @thinkcodee/music-library-organizer音乐库整理工作流:扫描→规划→主人确认→软删除→验证→清理。强调安全流程。Safe-by-default music library organizer with soft-delete + mandatory owner confirmation.
openclaw skills install @thinkcodee/music-library-organizer整理
/volume4/media2/音乐下的所有音乐和歌词文件,按歌手字母 A-Z 归类 + 重命名 + 去重。 核心安全原则:永不立即删除,整理后必须主人确认才能彻底删除。A safe-by-default music library organizer with 6-stage workflow: scan → plan → owner confirms → soft-delete → verify → cleanup. Hard deletes require explicit owner confirmation and 5-second delay.
永不立即删除文件
_已删除_时间戳/ 目录)整理后必须验证
必须分阶段
在动文件之前,先调研:
du -sh)find -type f | wc -l)ls -la)扫描所有文件,按 4 类分类:
| 分类 | 特征 | 处理方式 |
|---|---|---|
| 正常 | 父目录=歌手,文件名=歌手 - 歌名.ext | 跳过 |
| 反了 | 父目录=歌名,文件名=歌名 - 歌手.ext | 修正 |
| 命名不一致 | 文件名用 - 不是 -(无空格) | 改名 |
| 孤儿 | 无分隔符、无法识别 | 标记给主人看 |
关键工具:
-(带空格),后 -(不带空格)不修改任何文件,生成:
输出为 CSV 或 JSON,让人工审阅。
向主人报告:
**等待主人明确说"执行"**才能继续。
按顺序执行:
绝不删除任何文件——只移动和重命名。
执行后立即验证:
只有主人说"清理"/"删除 X"时:
rm -rf/volume4/media2/音乐/
├── A/
│ ├── A1 TRIP/
│ │ ├── A1 TRIP - 放空.flac
│ │ └── A1 TRIP - 放空.lrc
│ └── ...
├── B/
│ ├── Beyond/
│ │ ├── Beyond - 海阔天空.flac
│ │ └── Beyond - 海阔天空.lrc
│ └── ...
├── Z/
│ ├── 周杰伦/
│ │ ├── 周杰伦 - 晴天.flac
│ │ └── 周杰伦 - 晴天.lrc
│ └── ...
├── 其他/ # 数字开头/无法识别的
└── _低音质备份/ # 替换掉的低质版本(保留)
歌手 - 歌名.格式 (如 周杰伦 - 晴天.flac)& 连接(如 Alan Walker & K-391 - Different World.flac)歌曲名.格式,归入 其他/歌手 - 歌名.lrc-(带空格)-(不带空格)、不用 _无损 (FLAC/APE/WAV) → 100/95/90
320k MP3 → 70
高码率 MP3 (≥256k) → 60
普通 MP3 → 50
M4A / AAC → 40/35
OGG / OPUS → 30
WMA → 20
其他 → 10
被替换的低音质文件 → 目标根目录/_低音质备份/原路径(保留,不删除)
pypinyin 库转拼音首字母其他/scripts/ 子目录中)| 脚本 | 用途 |
|---|---|
scripts/organize_music.py | 主整理脚本(dry-run + apply) |
scripts/dedup_music.py | 按音质优先级去重 |
scripts/rematch_lyrics.py | 重新匹配歌词到音乐 |
scripts/clean_orphan_lyrics.py | 清理孤立歌词(软删除) |
scripts/restore_orphan_lyrics.py | 从软删除目录恢复歌词 |
scripts/cleanup_empty_dirs_v2.py | 清理空目录(软删除,v2 修正版) |
脚本位置:scripts/ 子目录(已随 skill 打包)
完整脚本说明:参见 scripts/README.md
主脚本详细文档:参见 scripts/organize_music.README.md
# 1. 调研
ls -la /volume4/media2/音乐/ # 看顶层
du -sh /volume4/media2/音乐/
find /volume4/media2/音乐/ -type f | wc -l
# 2. 干跑
python3 /root/.openclaw/workspace/scripts/organize_music.py --no-tag
# 输出: 整理报告_dryrun_时间戳.csv
# 3. 给主人看报告
# 报告: 影响 X 文件, Y GB, 涉及 Z 个歌手
# 4. 主人确认
# "执行"
# 5. 真执行
python3 /root/.openclaw/workspace/scripts/organize_music.py --apply
# 6. 验证
ls /volume4/media2/音乐/A/ | head -10
ls /volume4/media2/音乐/Z/ | head -10
# 7. 生成清单(可选)
python3 /root/.openclaw/workspace/scripts/generate_music_xlsx.py
_低音质备份/)# 1. 扫描备份
du -sh /volume4/media2/音乐/_低音质备份/
find /volume4/media2/音乐/_低音质备份/ -type f | wc -l
# 2. 检查冲突
# 找备份里文件 vs 主目录同名文件 → 报告冲突
# 3. 给主人看 dry-run
# "X 个文件将移动到主目录, Y 个冲突(主目录更优,跳过)"
# 4. 主人确认
# 5. 执行
# - 移动非冲突文件
# - 删除冲突的备份文件(**不删主目录版本**)
# - 删除空目录
# 6. 验证 + 生成清单
# 1. 扫描所有"反了"的文件
# 规则:父目录=歌名(looks_like_song_title),文件名=歌手
# 2. 报告
# "X 个文件需要:改名 + 移动到正确歌手目录"
# "Y 个是父目录=歌名但其实是多歌手"
# 3. 主人确认
# 4. 执行:重命名 + mv + 删空目录
每次执行前:
每次删除前:
| 错误 | 处理 |
|---|---|
| 权限拒绝 | chmod -R a+rX 后重试 |
| 磁盘满 | 立即停止,报告 |
| 目标位置冲突 | 报告给主人,不要自动覆盖 |
| ID3 标签解析失败 | 回退到文件名解析 |
| 父目录=歌名 | 报告给主人,让主人决定 |
| 无法识别的格式 | 移到 其他/ |
/音乐/ 已清空(实际 46,000+ 项目还在)ls -la 实际验证-(带空格)统一格式/root/.openclaw/workspace/scripts/organize_music.py/root/.openclaw/workspace/scripts/organize_music.README.md/root/.openclaw/workspace/MEMORY.md/root/.openclaw/workspace/memory/skipped_conflicts_20260621.md