Odpowiedzi:
Jest to znany błąd , który został naprawiony w nowszych wersjach Banshee.
Możesz użyć najnowszej wersji Banshee z PPA Banshee :
sudo add-apt-repository ppa:banshee-team/ppa
sudo apt-get update && sudo apt-get upgrade
Znajdź bazę danych sqlite3 (~ / .config / banshee-1 / banshee.db) i uruchom następujące zapytanie:
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 Użyj polecenia „sqlite3”, aby otworzyć bazę danych, a nie tylko „sqlite”.
PPS Musiałem uruchomić zapytanie kilka razy, każde uruchomienie usuwa tylko jeden dodatkowy duplikat. Dzieje się tak, ponieważ wewnętrzna selekcja zwraca tylko jeden identyfikator nadwyżki ścieżki dla każdej kombinacji Tytuł / Wykonawca / Album.
Ta odpowiedź używa Pythona, aby uzyskać dostęp do bazy danych banshee, a następnie wykonać akcję sql, którą donbicca wymienia z niespodzianką. Zamiast wielokrotnie uruchamiać kod SQL, poprosiłem Pythona o zapętlenie kodu SQL o liczbę wystąpień w kodzie SQL. Musisz uruchomić ten kod tylko raz. Musisz zastąpić swoją ścieżkę domową (zastąp „/ home / JONDOE” swoją ścieżką domową).
#!/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()
Inna alternatywa dla usunięcia piosenki duplicqtes z bazy danych banshee sqlite:
cd /home/youruser/.config/banshee-1/
Zamknij Banshee PIERWSZE! Utwórz kopię zapasową bazy danych:
cp banshee.db banshee.db.bck
Jeśli nie masz zainstalowanego sqlite:
sudo apt-get install sqlite3
Otwórz DB:
sqlite3 banshee.db
Wpisz to zapytanie:
DELETE FROM coretracks WHERE TrackID NOT IN (SELECT MIN(TrackID) FROM coretracks GROUP BY TitleLowered, ArtistID,AlbumID,Title);
wyjście:
.q
Gotowe, otwórz Banshee i sprawdź wynik.