Sebagai solusi yang memungkinkan, Anda dapat menggunakan alat apa pun untuk mengonversi file ke aliran terkompresi ( pcm
, wav
) tanpa info metadata dan kemudian membandingkannya. Untuk konversi, Anda dapat menggunakan perangkat lunak apa pun yang Anda suka ffmpeg
, sox
atau avidemux
.
Misalnya bagaimana saya melakukannya dengan ffmpeg
Katakanlah saya punya untuk contoh itu 2 file dengan metadata yang berbeda:
$ diff Original.mp3 Possible-dup.mp3 ; echo $?
Binary files Original.mp3 and Possible-dup.mp3 differ
Perbandingan kasar memaksa mereka berbeda.
Kemudian kita cukup konversi dan diff tubuh:
$ 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 $?
Bagian tentunya hanya untuk tujuan demonstrasi untuk melihat kode kembali.
Memproses banyak file (melintasi direktori)
Jika Anda ingin mencoba duplikat dalam koleksi itu harus layak untuk checksum menghitung (setiap seperti crc
, md5
, sha2
, sha256
) data dan kemudian hanya menemukan ada tabrakan.
Meskipun di luar ruang lingkup pertanyaan itu saya akan menyarankan beberapa saran sederhana bagaimana menemukan duplikat file dalam direktori akuntansi hanya isinya tanpa pertimbangan metadata.
- Pertama menghitung hash data di setiap file (dan menempatkan ke dalam file untuk diproses selanjutnya):
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
File akan terlihat seperti:
$ cat mp3data.hashes
ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3
54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Setiap RDBMS akan sangat membantu di sana untuk menghitung jumlah dan memilih data tersebut. Tapi teruskan solusi command-line murni Anda mungkin ingin melakukan langkah-langkah sederhana seperti lebih lanjut.
Lihat duplikat hash jika ada (langkah ekstra untuk menunjukkan cara kerjanya, tidak diperlukan untuk menemukan dupes):
$ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes
[1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1
[1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2
[1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1
- Dan bersama-sama daftar file yang digandakan berdasarkan konten :
$ 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 adalah awk
skrip sederhana untuk menghitung pola regexp.