Mümkün olan bir çözüm pcm
, wav
meta veri bilgisi olmadan dosyayı sıkıştırılmamış akışa ( , ) dönüştürmek ve daha sonra karşılaştırmak için herhangi bir aracı kullanabilirsiniz . Dönüşüm için size sizin gibi sahip herhangi bir yazılım kullanabilir ffmpeg
, sox
ya da avidemux
.
Örneğin bunu ffmpeg ile nasıl yaparım
Diyelim ki bu örnek için farklı meta verilere sahip 2 dosya var:
$ diff Original.mp3 Possible-dup.mp3 ; echo $?
Binary files Original.mp3 and Possible-dup.mp3 differ
Kaba kuvvet karşılaştırması farklı olduklarından şikayet ediyor.
Sonra sadece vücudu dönüştürüyoruz ve farklılaştırıyoruz:
$ 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
Ders dışı ; echo $?
kısmı sadece gösteri amacıyla dönüş kodunu görmek içindir.
Birden fazla dosya işleme (dizinler arasında gezinme)
Eğer koleksiyonunda çiftleri denemek isterseniz o hesapla toplamlarını için yetmeyecek kadar (eğer böyle crc
, md5
, sha2
, sha256
) verilerin ve sonra sadece orada çarpışmalara bulabilirsiniz.
Her ne kadar bu sorunun kapsamı dışında olsa da, ben sadece meta veri dikkate olmadan içeriği muhasebesi dosyalarının kopyalarını bulmak için bazı basit öneriler öneririz.
- Önce her dosyadaki veri karmasını hesaplayın (ve sonraki işlemler için dosyaya yerleştirin):
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
Dosya şöyle görünecektir:
$ cat mp3data.hashes
ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3
54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Herhangi bir RDBMS, bu tür verileri toplamak ve seçmek için orada çok yardımcı olacaktır. Ancak devam etmek isteyebileceğiniz saf komut satırı çözümüne devam edin.
Varsa yinelenen karma değerlerine bakın (nasıl çalıştığını göstermek için ek adım, dupes bulma için gerekli değildir):
$ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes
[1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1
[1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2
[1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1
- Ve hep birlikte içerik tarafından kopyalanan dosyaları listelemek için :
$ 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 normal ifadeleri saymak için basit bir awk
komut dosyasıdır.