作为可能的解决方案,你可以使用任何工具转换文件到未压缩的流(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
计算regexp模式的简单脚本。