Als mögliche Lösung können Sie ein beliebiges Werkzeug verwenden, um eine Datei in einen unkomprimierten Stream ( pcm
, wav
) ohne Metadaten-Informationen zu konvertieren und diese anschließend zu vergleichen. Zur Konvertierung können Sie eine beliebige Software verwenden, die Ihnen gefällt ffmpeg
, sox
oder avidemux
.
Zum Beispiel wie ich das mit ffmpeg mache
Angenommen, ich habe für dieses Beispiel 2 Dateien mit unterschiedlichen Metadaten: $ diff Original.mp3 Possible-dup.mp3 ; echo $? Binary files Original.mp3 and Possible-dup.mp3 differ
Brute-Force-Vergleich beschwert sich, dass sie unterschiedlich sind.
Dann konvertieren wir einfach und differ body: $ 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
Natürlich ist der ; echo $?
Teil nur zu Demonstrationszwecken, um den Rückkehrcode zu sehen.
Verarbeitung mehrerer Dateien (Querverzeichnisse)
Wenn Sie versuchen wollen Duplikate in der Sammlung haben es sich lohnt Prüfsummen zu berechnen (alle wie crc
, md5
, sha2
, sha256
) von Daten und dann einfach da Kollisionen finden.
Obwohl es außerhalb des Rahmens dieser Frage liegt, würde ich einige einfache Vorschläge vorschlagen, wie Duplikate von Dateien in der Verzeichnisabrechnung finden kannst, nur deren Inhalt ohne Berücksichtigung der Metadaten.
- Berechnen Sie zuerst den Hashwert der Daten in jeder Datei (und legen Sie ihn für die nächste Verarbeitung in einer Datei ab): Die
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
Datei sieht wie folgt aus: $ cat mp3data.hashes ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02:file1.mp3 54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480:file2.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3
Jedes RDBMS wird dort sehr hilfreich sein, um die Anzahl zu zählen und diese Daten auszuwählen. Fahren Sie jedoch mit einer reinen Befehlszeilenlösung fort, die Sie möglicherweise mit einfachen Schritten erledigen möchten.
Falls vorhanden, sehen Sie doppelte Hashes (zusätzlicher Schritt, um zu zeigen, wie es funktioniert, wird nicht benötigt, um Dupes zu finden): $ count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes [1:54320b708cea0771a8cf71fac24196a070836376dd83eedd619f247c2ece7480]=1 [1:1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f]=2 [1:ad48913a11de29ad4639253f2f06d8480b73d48a5f1d0aaa24271c0ba3998d02]=1
- Und alle zusammen, um die nach Inhalt duplizierten Dateien aufzulisten :
$ grep mp3data.hashes -f <( count.by.regexp.awk '([0-9a-f]+):' mp3data.hashes | grep -oP '(?<=\[1:).(?!]=1$)' ) | sort 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Original.mp3 1d8627a21bdbf74cc5c7bc9451f7db264c167f7df4cbad7d8db80bc2f347110f:Possible-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other-dup.mp3 8918674499b90ace36bcfb94d0d8ca1bc9f8bb391b166f899779b373905ddbc1:Other.mp3
count.by.regexp.awk ist ein einfaches awk
Skript, um reguläre Ausdrücke zu zählen.