Navidrome 删除音乐分类 Library 记录

  1. 安装sqlite3
sudo apt update
sudo apt install sqlite3
  1. 备份数据库
cp ./data/navidrome.db ./data/navidrome.db.bak.$(date +%F-%H%M%S)
  1. 查看所有 Library
sqlite3 ./data/navidrome.db "SELECT id, name, path FROM library;"

1|音乐|/music
2|儿童|/children
3|123|/music/123
  1. 不要删 path 是 /music 的默认库,只删新建的 Library,比如删 儿童

清理已经没有 Library 关联的旧索引

sqlite3 ./data/navidrome.db "DELETE FROM library WHERE name = '儿童';"
或
sqlite3 ./data/navidrome.db "DELETE FROM library WHERE id = 2;"
  1. 数据库清理
sqlite3 ./data/navidrome.db "
DELETE FROM media_file
WHERE library_id IS NULL
   OR library_id NOT IN (SELECT id FROM library);
VACUUM;
"

查看容器内看到的音乐文件

docker exec navidrome find /music -type f \( \
  -iname "*.mp3" -o \
  -iname "*.flac" -o \
  -iname "*.m4a" -o \
  -iname "*.aac" -o \
  -iname "*.ogg" -o \
  -iname "*.opus" -o \
  -iname "*.wav" -o \
  -iname "*.wma" \
\) | wc -l

进 Navidrome 网页,执行完整扫描,执行下面命令,容器内文件数和库文件数是否一致,一致即可

sqlite3 ./data/navidrome.db "
SELECT l.id, l.name, l.path, COUNT(mf.id) AS songs
FROM library l
LEFT JOIN media_file mf ON mf.library_id = l.id
GROUP BY l.id, l.name, l.path;
"