Como posible solución, puede usar cualquier herramienta para convertir archivos en secuencias sin comprimir ( pcm
, wav
) sin información de metadatos y luego compararlos. Para la conversión, puede usar cualquier software que le guste ffmpeg
, sox
o avidemux
.
Por ejemplo, cómo hago eso con ffmpeg
Digamos que tengo para ese ejemplo 2 archivos con metadatos diferentes: la
$ diff Original.mp3 Possible-dup.mp3 ; echo $?
Binary files Original.mp3 and Possible-dup.mp3 differ
comparación de fuerza bruta se queja de que son diferentes.
Luego, simplemente convertimos y diferimos cuerpo
$ 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
Por supuesto, la ; echo $?
parte es solo para fines de demostración para ver el código de retorno.
Procesamiento de múltiples archivos (directorios transversales)
Si quieres probar duplicados en la colección que tiene valor para calcular sumas de comprobación (cualquier parecido crc
, md5
, sha2
, sha256
) de los datos y luego simplemente encontrar allí colisiones.
Aunque está fuera del alcance de esa pregunta, sugeriría algunas sugerencias simples sobre cómo encontrar duplicados de archivos en el directorio contando solo su contenido sin consideración de metadatos.
- Primero calcule el hash de datos en cada archivo (y colóquelo en el archivo para el siguiente procesamiento): el
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
archivo se verá así:
$ cat mp3data.hashes
ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3
54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3
8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Cualquier RDBMS será muy útil allí para agregar el recuento y seleccionar dichos datos. Pero continúe con la solución de línea de comandos pura que desee hacer pasos simples como más.
Vea los hashes duplicados, si los hay (paso adicional para mostrar cómo funciona, no es necesario para encontrar engaños):
$ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes
[1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1
[1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2
[1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1
- Y todo junto para enumerar archivos duplicados por contenido :
$ 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 es un awk
script simple para contar patrones regexp.