LinuxForum.Fans
Тема

Одинаковые имена файлов

Автор: dezhurant 16 сообщений 2469 просмотров
#281092

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

#281093

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

#281097
"Lupo Alberto" написал:
анализировать информацию в метаданных

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

#281105

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

#281106
"dezhurant" написал:
А nepomuk тут не помощник?

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

#281109

Ну что ж, начинаю осваивать скриптописание... *DONT_KNOW*
Спасибо, указали нужное направление... :)

#281187

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

text

#!/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, куда перемещает все дубликаты. Критерии отбора - совпадение названия произведения и автора одновременно.

#281199
"-=Serj=-" написал:
Критерии отбора - совпадение названия произведения и автора одновременно.

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

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

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

#281202
"-=Serj=-" написал:
Или это на тот случай, если метаданные не совпадают, а файлы на самом деле одинаковые?

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

#281205

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

#281246

"-=Serj=-" написал:
метаданные не совпадают, а файлы на самом деле одинаковые?
Такое возможно, если по md5sum проверять не весь файл (частью которого метаданные тоже являются), а только непосредственно звуковой поток.
#281261

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

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

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

#281274

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

#281397
"-=Serj=-" написал:
Решение на Python:

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

Войдите или зарегистрируйтесь, чтобы ответить.