Як можливе рішення, ви можете використовувати будь-який інструмент для перетворення файлу в нестиснений потік ( pcm
, wav
) без інформації метаданих, а потім порівняти його. Для перетворення ви можете використовувати будь-яке програмне забезпечення, яке вам подобається ffmpeg
, sox
або avidemux
.
Наприклад, як я це роблю з ffmpeg
Скажімо, я маю для цього прикладу 2 файли з різними метаданими:
$ diff Original.mp3 Possible-dup.mp3 ; echo $?
Binary files Original.mp3 and Possible-dup.mp3 differ
грубе порівняння сили скаржаться, що вони різні.
Тоді ми просто перетворюємо та відрізняємо тіло:
$ diff <( ffmpeg -loglevel 8 -i Original.mp3 -map_metadata -1 -f wav - ) <( ffmpeg -loglevel 8 -i Possible-dup.mp3 -map_metadata -1 -f wav - ) ; echo $?
0
; echo $?
Частина поза курсом призначена лише для демонстрації, щоб побачити код повернення.
Обробка декількох файлів (перехідні каталоги)
Якщо ви хочете спробувати дублікати в колекції він має цінність для підрахунку контрольних сум (будь- , як crc
, md5
, sha2
, sha256
) даних , а потім просто знайти там зіткнення.
Хоча це питання не входить до сфери цього питання, я б запропонував кілька простих пропозицій, як знайти дублікати файлів у бухгалтерському обліку каталогів лише його вмісту без врахування метаданих.
- Спочатку обчисліть хеш даних у кожному файлі (і помістіть у файл для наступної обробки):
for file in *.mp3; do printf "%s:%s\n" "$( ffmpeg -loglevel 8 -i "$file" -map_metadata -1 -f wav - | sha256sum | cut -d' ' -f1 )" "$file"; done > mp3data.hashes
Файл буде виглядати так:
$ cat mp3data.hashes
ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3
54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Будь-які RDBMS будуть дуже корисні там, щоб зібрати кількість та вибрати такі дані. Але продовжуйте чисте рішення командного рядка, можливо, ви хочете зробити прості кроки, як далі.
Дивіться дублікати хешей, якщо такі є (додатковий крок, щоб показати, як він працює, не потрібен для пошуку дупів):
$ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes
[1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1
[1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2
[1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1
- І всі разом, щоб перелічити файли, дубльовані за вмістом :
$ grep mp3data.hashes -f <( count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes | grep -oP '(?<=\[1:).{64}(?!]=1$)' ) | sort
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
count.by.regexp.awk - це простий awk
скрипт для підрахунку шаблонів регулярних виразів.