가능한 해결책으로 도구를 사용하여 메타 데이터 정보없이 파일을 압축되지 않은 스트림 ( pcm
, wav
) 으로 변환 한 다음 비교할 수 있습니다. 변환을 위해 ffmpeg
, sox
또는 원하는 소프트웨어를 사용할 수 있습니다 avidemux
.
예를 들어 ffmpeg로 어떻게하는지
메타 데이터가 다른 예제 2 파일이 있다고 가정 해 봅시다.
$ diff Original.mp3 Possible-dup.mp3 ; echo $?
Binary files Original.mp3 and Possible-dup.mp3 differ
무차별 대입 (Brute force) 비교는 서로 다르다고 불평합니다.
그런 다음 본문을 변환하고 비교합니다.
$ 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
하십시오. 경우에 따라 여러 디렉토리 만 비교할 수 있습니다. fe :
find -L orig-dir dir-with-duplicates -name '*.mp3' -print0 | while read -r -d $'\0' file; 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
정규 표현식 패턴을 계산하는 간단한 스크립트입니다.
PS 약간 조정 된 https://superuser.com/a/1219353/435801 변형 .