Jak znaleźć i usunąć zduplikowane utwory muzyczne?

8

Mój problem polega na tym, że z jakiegoś powodu mam duplikaty niektórych utworów muzycznych. Jednak nie są one nazywane identycznie. Na przykład:

Muzyka / Prefuse 73 / One Word Gasting / 07. Detchibe.mp3

I

Muzyka / Prefuse 73 / One Word Extinguisher / 07 - Detchibe.mp3

Zauważ, że są to zduplikowane utwory, ale 07 * . * i 07 - oszukuje zduplikowane wyszukiwarki plików, które wyszukują na podstawie nazw plików.

John McKean Pruitt
źródło
2
Czy wypróbowałeś którąś z sugestii tutaj ?
jpd
Czy fdupes może wyróżnić jeden z dwóch duplikatów i usunąć go? W przeciwnym razie polecenie fdupes -r generuje tylko listę, która nigdzie mnie nie prowadzi.
John McKean Pruitt
Czy to odpowiada na twoje pytanie? Jak znaleźć zduplikowane utwory?
karel

Odpowiedzi:

2

Możesz użyć fdupespodobnej odpowiedzi na pytanie »Jak znaleźć i usunąć duplikaty plików« sugerowane. Podam przykład:

mkdir -p "Music/Prefuse 73/One Word Extinguisher/"
dd if=/dev/urandom of=Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 bs=1023 count=2048
  2048+0 records in
  2048+0 records out
  2095104 bytes (2.1 MB) copied, 0.379806 s, 5.5 MB/s
cp Music/Prefuse\ 73/One\ Word\ Extinguisher/07.Detchibe.mp3 Music/Prefuse\ 73/One\ Word\ Extinguisher/"07 - Detchibe.mp3"
fdupes -rd .
  [1] ./Music/Prefuse 73/One Word Extinguisher/07.Detchibe.mp3
  [2] ./Music/Prefuse 73/One Word Extinguisher/07 - Detchibe.mp3

  Set 1 of 1, preserve files [1 - 2, all]:

Najpierw utworzyłem katalog jak w twoim przykładzie. Zrobiłem plik z losowych danych i skopiowałem jego zawartość do innych plików. Po uruchomieniu fdupes -rdoprogramowanie wyszukuje dwa dokładne pliki i pyta, które z nich usunąć.

Jeśli masz dużo plików, możesz skorzystać z tej opcji -1. fdupeswydrukuje wszystkie duplikaty w jednym wierszu. Możesz je przetwarzać za pomocą xargsi innych funkcji powłoki.

qbi
źródło
Czy wyjście wypisane z polecenia fdupes -r może być potokowane do polecenia mv?
John McKean Pruitt
fdupes -rd jest blisko tego, czego chcę, ale będę musiał nacisnąć jeden z nich około 2000 razy, aby wszystkie duplikaty zniknęły.
John McKean Pruitt
1
Do powyższej odpowiedzi dodałem akapit.
qbi
Problem polega na tym, fdupesże nie wydaje się, aby nurkować w podfolderach. Na przykład ~/Desktop/Dupes2/zawiera folder zatytułowany Blood Sugar Sex Magik with the Dupes, ale proste fdupes -rpolecenie nie zwraca żadnej listy.
John McKean Pruitt,
2

Znalazłem dość prosty łańcuch poleceń. Ogromne podziękowania dla @Oli.

fdupes -rf --quiet ~/Desktop/Dupes2/ | while read i; do mv "$i" ~/Desktop/Dupes/ ; done

Kiedyś fdupesrekurencyjnie ( -r) znajdowało duplikaty, pomijając pierwszą ( -f). Bash czyta ten wiersz po wierszu przez readręce i każdą linię, mvaby przenieść wszystkie duplikaty do innego katalogu. Zwróć uwagę na użycie cudzysłowów w whilepętli do obsługi spacji i innych podejrzanych interpunkcji, fdupesktóre nie będą obsługiwane (nawet z -1/ --sameline).

John McKean Pruitt
źródło
@Oli, to nie załatwia sprawy. Żadne pliki nie są przenoszone z jednego folderu do drugiego
John McKean Pruitt
@Oli zobacz mój najnowszy komentarz do „qbi” poniżej.
John McKean Pruitt
1

W odpowiedziach na Ręcznie ustawione liczenie słuchania utworów w Banshee? , opisuje, jak uzyskać dostęp do bazy danych używanej przez banshee do zapisywania wszystkich informacji o ścieżce.

Po nawiązaniu połączenia z bazą danych, w tabeli zapytań wykonaj, wklej

select tweaked_track, count(*) from 
  (select replace(replace(replace(title, ' ', ''), '-', ''), '.', '') as tweaked_track 
   from coretracks) 
group by tweaked_track 
order by 2, 1 desc;

w polu ciągu SQL, a następnie kliknij „wykonaj zapytanie”. Spowoduje to wyświetlenie wszystkich ścieżek o tym samym tytule, ignorując spacje, myślniki i kropki. Jeśli są inne znaki, które chcesz zignorować, dodaj je do zapytania według tego samego wzoru. (IE dodaj replace(przed pierwszym istniejącym „zamień” i po ostatnim „)” w tym wierszu, dodaj , '[character you want removed]', '').

(Nie wiem, ile wiesz o sql - jeśli potrzebujesz więcej szczegółów, dodaj komentarz).

To da ci listę tytułów. Będziesz musiał sam usunąć.

Może to być lepszy sposób, ale jeśli tak, nie wiem o tym.

Gdy będziesz mieć dużą listę plików do usunięcia (z mojej metody lub z fdupesinnych, o których wspominali inni), umieść listę plików, które chcesz usunąć, w katalogu tekstowym. Upewnij się, że spełniony jest jeden z poniższych warunków:

Opcja nr 1: nazwy plików zawierają pełną ścieżkę. Na przykład plik może zawierać:

/home/doneill/music/weird_al/duped_file.mp3
/home/doneill/music/weird_al/another_dupe.mp3
/home/doneill/music/bach/baroque_dupe.mp3

Opcja nr 2: nazwy plików zawierają ścieżkę względną, a plik z listą nazw plików jest zapisywany w folderze nadrzędnym. Na przykład, jeśli lista plików została zapisana /home/doneill/music/, zawierałaby:

weird_al/duped_file.mp3
weird_al/another_dupe.mp3
bach/baroque_dupe.mp3

W obu przypadkach otwórz okno terminala i przejdź do folderu zawierającego plik, cd /home/doneill/music/na przykład z listą .

Wpisz:

for a in `cat filelist.txt`; do echo $a; done

(Zastąpienie pliku filelist.txt nazwą pliku z listą). To powinno wypluć listę wszystkich plików, które chcesz usunąć. Poświęć chwilę, aby dokładnie sprawdzić listę. Jeśli to prawda, wpisz:

for a in `cat filelist.txt`; do rm $a; done

To w zasadzie mówi komputerowi: dla każdego wiersza w pliku filelist.txtusuń plik z wymienioną nazwą.

David Oneill
źródło
Pytanie dotyczy zduplikowanych plików, bez wzmianki o Banshee.
jpd
2
@jpd Oznakowane banshee ...
David Oneill
Przepraszamy, całkowicie pominięto tagi.
jpd
Nie mogę dostać się do bazy danych banshee, ponieważ 11.10 nie ma opcji otwarcia za pomocą niestandardowego polecenia, a obejście sugeruje, że nie działa - zostałem tam wrzucony do króliczej nory na sekundę, ale wróciłem bez rozwiązania.
John McKean Pruitt
1
@JohnMcKeanPruitt 1) ​​Uruchom przeglądarkę bazy danych sqlite (polecenie brzmi, sqlitebrowserjeśli nie zostanie wprowadzone do menu podczas instalacji). 2) Plik -> Otwórz. 3) Wpisz /home/[user]/.config/banshee-1/w pasek adresu „Szukaj w” (zamień [użytkownik] na swoją nazwę użytkownika). 4) Kliknij dwukrotnie banshee.db.
David Oneill,