Как найти и удалить повторяющиеся музыкальные треки?

Моя проблема в том, что по какой-то причине у меня есть дубликаты некоторых музыкальных треков. Однако они не называются одинаково. Например:

Music / Prefuse 73 / One Word Extinguisher / 07. Detchibe.mp3

& amp;

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

] Обратите внимание, что это дубликаты песен, но 07 * . * & amp; 07 - обманывает дубликаты поиска файлов, которые ищут на основе имен файлов.

7
задан 4 April 2012 в 22:13

2 ответа

В ответах на Вручную установите счетчик прослушивания прослушивания в Banshee? , в котором описывается, как получить в базе данных, которую использует banshee для сохранения всей информации о треке.

повторно подключиться к базе данных, в таблице запроса выполнения, вставить

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

в поле строки SQL, а затем нажать «выполнить запрос». Это покажет вам все треки, которые у вас есть с тем же названием, игнорируя пробелы, тире и периоды. Если есть другие символы, которые вы хотите игнорировать, добавьте их в запрос в тот же шаблон. (IE добавляет replace( до первой существующей «замены» и после последней «)» в этой строке, добавьте , '[character you want removed]', '').

(я не знаю, насколько вы знаете о sql - if вам нужно больше деталей, опубликуйте комментарий.)

Это даст вам список названий. Вам действительно нужно будет удалить себя.

Там может быть лучший способ сделать это, но если есть, я не знаю об этом.

Как только вы большой список файлов, которые нужно удалить (как из моего метода, так и из fdupes, как и другие, упомянутые выше), поместите список файлов, которые вы хотите удалить, в текстовый каталог. Убедитесь, что выполнено одно из следующих условий:

Параметр № 1: имена файлов содержат полный путь. Например, файл может содержать:

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

Вариант № 2: имена файлов содержат относительный путь, а файл со списком имен файлов сохраняется в родительской папке. Например, если ваш список файлов был сохранен в /home/doneill/music/, он будет содержать:

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

. В любом случае откройте окно терминала и перейдите в папку, содержащую файл со списком cd /home/doneill/music/ например.

Введите:

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

(Замена filelist.txt с именем файла со списком). Это должно вывести список всех файлов, которые вы хотите удалить. Найдите минутку, чтобы дважды проверить список. Если это правильно, введите:

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

Это в основном говорит вашему компьютеру: для каждой строки в файле filelist.txt удалите файл с указанным именем.

1
ответ дан 25 July 2018 в 19:34

Я нашел несколько простую цепочку команд. Огромное спасибо @Oli.

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

Это использовало fdupes для рекурсивного (-r), чтобы найти дубликаты, опустив первый (-f). Bash читает эту строку за строкой через read и направляет каждую строку в mv, чтобы переместить все дубликаты в другой каталог. Обратите внимание на использование кавычек в цикле while для обработки пробелов и другой хитроумной пунктуации, которые fdupes не будет обрабатывать (даже с помощью -1 / --sameline).

2
ответ дан 7 August 2018 в 19:18

Другие вопросы по тегам:

Похожие вопросы: