1

Доброго времени суток! OpenSuse 12.2. Есть флешка, на ней около 20 гб mp3 файлов, многие повторяются в разных папках. То-есть, произведение одного и того же исполнителя с таким же названием (но, возможно, с разным битрейтом и т.д.) может быть в двух и более папках. Как можно, кроме как вручную, избавиться от повторов имён файлов (наверное, всё-таки, это не будет дубликатами)?

Asus K52 JT; Intel Cor i3 2400; 8 Gb DDR3; ATI hd 6370М; OpenSuse Leap 15.1 (х64); kernel 5.3.1; KDE Plasma 5.12.8;  KDE Frameworks 5.55.0; QT 5.9.7.

2

Если уж совсем «по-правильному», то нужно анализировать информацию в метаданных и на её основе принимать решение об удалении дупликатов.

Был, был и весь вышел...

3

Lupo Alberto пишет:

анализировать информацию в метаданных

Разумеется, это наиболее верное решение, а как это сделать?

Asus K52 JT; Intel Cor i3 2400; 8 Gb DDR3; ATI hd 6370М; OpenSuse Leap 15.1 (х64); kernel 5.3.1; KDE Plasma 5.12.8;  KDE Frameworks 5.55.0; QT 5.9.7.

4

exiftool + bash + sed + awk
P.S. ...и, конечно, find bx

Был, был и весь вышел...

5

Спасибо, я попробую... Особое желание имею поработать с find-ом... aa А nepomuk тут не помощник?

Asus K52 JT; Intel Cor i3 2400; 8 Gb DDR3; ATI hd 6370М; OpenSuse Leap 15.1 (х64); kernel 5.3.1; KDE Plasma 5.12.8;  KDE Frameworks 5.55.0; QT 5.9.7.

6

dezhurant пишет:

А nepomuk тут не помощник?

Возможно, но это «микроскоп», работать с которым это надо ещё уметь ac

Был, был и весь вышел...

7 (21.10.2012 19:16:53 отредактировано dezhurant)

Ну что ж, начинаю осваивать скриптописание... bn
Спасибо, указали нужное направление... ab

Asus K52 JT; Intel Cor i3 2400; 8 Gb DDR3; ATI hd 6370М; OpenSuse Leap 15.1 (х64); kernel 5.3.1; KDE Plasma 5.12.8;  KDE Frameworks 5.55.0; QT 5.9.7.

8 (22.10.2012 11:01:11 отредактировано -=Serj=-)

Интересная задачка ab
Решение на Python:

#!/usr/bin/env python
#_*_coding: utf-8_*_

import sys, os
from mutagen.mp3 import MP3

if len(sys.argv) == 1:
    path = '.'
else:
    path = sys.argv[1]

dirTree = os.walk(path)
copyDir = os.path.join(os.path.abspath(path), 'copies') 

if not os.path.exists(copyDir):
    os.mkdir(copyDir)

d = {}

for dirPath, dirNames, Files in dirTree:
    if os.path.basename(copyDir) in dirNames:
        dirNames.remove(os.path.basename(copyDir))
    for File in Files:
        if File[-3:] == 'mp3':
            FullPath = os.path.join(os.path.abspath(dirPath), File)

            audio = MP3(FullPath)
            name = str(audio['TIT2'])
            author = str(audio['TPE1'])
            
            if name in d and author == d[name]:
                os.rename(FullPath, os.path.join(copyDir, File))
                print ("File ->%s<- was moved" %File)
            else:
                d[name] = author

Нужен модуль mutagen, в Убунте находится в пакете python-mutagen.
Скрипт нужно закинуть в верхний каталог муз. библиотеки, передача пути в параметрах пока не работает.
Программа создаёт директорию copies, куда перемещает все дубликаты. Критерии отбора - совпадение названия произведения и автора одновременно.

Да, у меня Ubuntu.
Нет, не глючит.

9

-=Serj=- пишет:

Критерии отбора - совпадение названия произведения и автора одновременно.

По md5summ проверку не мешало бы сделать :-)

It is good day to die ...
MS Windows 10
Заметки о главном...

10

i2ks пишет:

По md5summ проверку не мешало бы сделать :-)

Но одно и то же произведение может содержаться в разных файлах. Или это на тот случай, если метаданные не совпадают, а файлы на самом деле одинаковые?

Да, у меня Ubuntu.
Нет, не глючит.

11

-=Serj=- пишет:

Или это на тот случай, если метаданные не совпадают, а файлы на самом деле одинаковые?

Именно так и есть :-)

It is good day to die ...
MS Windows 10
Заметки о главном...

12

Да легко! Но попозже, времени нет...

Да, у меня Ubuntu.
Нет, не глючит.

13

-=Serj=- пишет:

метаданные не совпадают, а файлы на самом деле одинаковые?

Такое возможно, если по md5sum проверять не весь файл (частью которого метаданные тоже являются), а только непосредственно звуковой поток.

14

как вариант: [эх... чувствую сейчас меня закидают гнилыми фруктами]
можно с помощью easytag(гуёвая юзер-френдли тулза) в полу-автоматическом режиме раскидать по папкам/исполнителям, а потом по несколько  папок за раз обрабатывать и удалять копии...
ИМХО этот вариант лучше всего подходит, если теги есть, но они не совсем в порядке. т.е. для сортировки помоек понатыренных из разных мест...

bormant пишет:

Такое возможно, если по md5sum проверять не весь файл (частью которого метаданные тоже являются), а только непосредственно звуковой поток.

суммирование спасёт только если файлы и правда одни и теже...
а вот если битрейт разный или если это просто файло из совершенно разных источников, то это уж точно не поможет...

95% процентов проблем находятся между клавиатурой и стулом.

15

Ну да, тоже думаю от md5 толку будет мало...

Да, у меня Ubuntu.
Нет, не глючит.

16

-=Serj=- пишет:

Решение на Python:

Работает, спасибо! bo А по md5 сравнивать-ну, в моём случае задача не стоит, но если тему развивать.... может, кому-то и надо будет.

Asus K52 JT; Intel Cor i3 2400; 8 Gb DDR3; ATI hd 6370М; OpenSuse Leap 15.1 (х64); kernel 5.3.1; KDE Plasma 5.12.8;  KDE Frameworks 5.55.0; QT 5.9.7.