如何從Banshee中刪除重複的音軌?

如何从Banshee中删除重复的音轨?

请查看这个帖子:http://askubuntu.com/questions/4323/how-can-i-find-duplicate-songs - belacqua
如果我有1000个重复的音轨,那么我需要运行这个命令1000次吗? - user43446
4个回答


1我并没有觉得这个问题特别指向那个错误。即使你从未遇到导入/重新扫描的错误,你的音乐库中仍可能出现重复的曲目,而且我不确定现在是否有任何自动删除它们的方法,因为Mirage扩展中已经没有这个选项了。 - Michael Martin-Smucker

定位sqlite3数据库(~/.config/banshee-1/banshee.db)并运行以下查询:
delete from coretracks where TrackID in
(
  select trackid from 
     (
      select TrackID as trackid, count(TrackID) as c from coretracks 
      group by TitleLowered,ArtistID,AlbumID,Title
     )
  where c > 1
);

PS 使用命令 "sqlite3" 打开数据库,而不是只用 "sqlite"。

PPS 我不得不多次运行查询,每次运行只删除一个额外的重复项。这是因为内部选择语句只返回每个标题/艺术家/专辑组合中一个多余曲目的ID。


这个答案使用Python访问banshee数据库,然后执行donbicca列出的SQL操作,并进行了一些改进。与其多次运行SQL代码,我已经要求Python将SQL代码循环执行与SQL代码中存在的实例数量相同的次数。您只需要运行此代码一次。您需要将您的主目录路径(将“/home/JONDOE”替换为您的主目录路径)进行替换。
#!/usr/bin/env python

import sqlite3

#open database to determine number of rows to loop over

db = sqlite3.connect('/home/me/.config/banshee-1/banshee.db')
cursor = db.cursor()

a = cursor.execute('SELECT TrackID from coretracks group by TitleLowered,ArtistID,AlbumID,Title')
a_trackid = a.fetchall()
db.close()

#Close database to ensure results do not impact future results. Then reopen database

db = sqlite3.connect('/home/me/.config/banshee-1/banshee.db')
cursor = db.cursor()
sql = ('DELETE from coretracks where TrackID in (SELECT TrackID from (SELECT TrackID as trackid, count(TrackID) as g from coretracks group by TitleLowered,ArtistID,AlbumID,Title) where g > 1)')

for i in a_trackid:
    cursor.execute(sql)

db.commit()
db.close()

从Banshee的SQLite数据库中删除重复歌曲的另一种方法是:
cd /home/youruser/.config/banshee-1/

关闭Banshee先! 备份你的数据库:
cp banshee.db banshee.db.bck

如果您尚未安装SQLite,请注意:
sudo apt-get install sqlite3

打开数据库:
sqlite3 banshee.db

请将此查询输入:
DELETE FROM coretracks WHERE TrackID NOT IN (SELECT MIN(TrackID) FROM coretracks GROUP BY TitleLowered, ArtistID,AlbumID,Title);

退出:
.q

你完成了,打开Banshee并检查结果。

我曾经遇到过类似的问题,这个方法完美地解决了我的困扰。谢谢。 - SeveralBlueberries