컴퓨터에서 중복 이미지 파일을 제거하는 가장 좋은 방법은 무엇입니까?


13

내 Windows 컴퓨터, 다른 하위 폴더 및 다른 파일 이름으로 많은 중복 이미지 파일이 있습니다.

중복을 제거하기 위해 어떤 Python 스크립트 또는 프리웨어 프로그램을 권장합니까?

(나는 읽었다. 비슷한 질문이지만, 포스터는 다른 파일 크기로 시각적 인 중복을 묻습니다. 내 파일 이름이 다른 파일과 중복됩니다.)


2
모든 픽셀이 같더라도 현재 대부분의 현재 제안 된 솔루션에 문제가되는 다른 EXIF ​​정보 (일부 단계에서 이미지를 처리하는 프로그램에 의해 수정 됨)가있을 수 있습니다.
user12889

답변:


17

MD5 합계에 의존하지 마십시오.

MD5 합계는 중복을 확인할 수있는 신뢰할만한 방법이 아니며 차이점을 확인하는 유일한 방법입니다.

MD5를 사용하여 찾기 가능한 후보자 중복 된 다음 MD5를 공유하는 각 쌍에 대해

  1. 두 파일을 모두 엽니 다.
  2. 하나가 다를 때까지 해당 파일에서 앞으로 탐색합니다.

중복 아이덴티티 파일에 대한 순진한 접근 방식을 사용하는 사람들이 내가 싫어하는 것을보고 있습니다. 전적으로 SHA256 또는 SHA512와 같은 더 거친 무언가를 사용하면 해쉬 알고리즘에서 더 많은 비트를 검사함으로써 합리적인 수준으로 확률을 낮출 수 있습니다. MD5는 충돌 조건이 너무 약합니다.

또한 '파일 체크'라는 제목의 메일 링리스트를 읽는 사람들에게 조언합니다. http://london.pm.org/pipermail/london.pm/Week-of-Mon-20080714/thread.html

"MD5가 모든 파일을 고유하게 식별 할 수 있습니다"라고 말하면 논리 오류가 발생합니다.

길이가 40,000 바이트에서 길이가 100,000,000,000 바이트까지 다양한 값의 범위가 주어지면 해당 범위에서 사용할 수있는 조합의 총 수 매우 단순한 128 비트 길이의 MD5로 표시되는 가능한 값 수를 초과합니다.

2 ^ 128 조합만으로 2 ^ 100,000,000,000 조합을 나타냅니다? 나는 그렇게 생각하지 않는다.

최소한의 순진한 길

중복을 제거하는 가장 순진한 방법과 가장 빠른 방법은 다음과 같습니다.

  1. 크기 기준 : 크기가 다른 파일은 동일하지 않을 수 있습니다. 파일을 열 필요가 없으므로 시간이 오래 걸립니다.
  2. MD5 : 다른 MD5 / Sha 값을 가진 파일은 동일 할 수 없습니다. 파일의 모든 바이트를 읽고 수학을 수행해야하기 때문에 시간이 좀 더 오래 걸리지 만 여러 번 비교하는 것이 더 빠릅니다.
  3. 위의 차이점에 실패 : 파일을 바이트 단위로 비교합니다. 이것은 실행하기에 느린 테스트이므로 다른 모든 제거 요소가 고려 될 때까지 이것이 남아있는 이유입니다.

포듀 페스 이러다. 동일한 기준을 사용하는 소프트웨어를 사용해야합니다.


7
문자 그대로 MD5가 충돌하는 것보다 하드 드라이브가 이미지를 마술처럼 파괴 할 가능성이 더 큽니다. "2 ^ 128,000 개의 조합으로 2 조 ~ 100,000,000,000 개의 조합을 나타냅니다"- 여기에 동의합니다. 그가 2 ^ 100,000,000,000 개의 그림을 가지고 있다면 MD5 (또는 거의 모든 해시 알고리즘)가 좋지 않을 것입니다.
Greg Dean

4
있다 아니 보증, 그저 있을 것 같지 않게 . 그 아니 불가능한. 서로 충돌하는 10 개의 파일을 가질 수는 있지만 모두 완전히 다릅니다. 이것은 발생하지 않을 수도 있지만 일어날 수 있으므로 테스트해야합니다.
Kent Fredric

2
파일 크기, MD5 그리고 바이트 검사를위한 바이트.
Brad Gilbert

3
@ 켄트 - 너와 100 % 동의 해. 우리가 이야기하는 것처럼 보이지 않을지라도, 그것은 매우 희박하기 때문에 무언가를 무시하는 것이 게으름입니다. 프로그램을 작성한 사람이 뭔가 코딩하기가 너무 어려울 것으로 생각했기 때문에 일부 데이터가 삭제 된 경우 화가 났을 것입니다.
Joe Taylor

10

Cygwin이 설치된 유닉스 (Linux 포함) OS 또는 Windows와 같은 하나의 라이너입니다.

find . -type f -print0 | xargs -0 shasum | sort |
  perl -ne '$sig=substr($_, 0, 40); $file=substr($_, 42); \
    unlink $file if $sig eq $prev; $prev = $sig'

md5sum (약 50 % 빨라짐)은 고의적으로 생성 된 충돌이 없다는 것을 알고있는 경우 사용할 수 있습니다 (자연스럽게 발생하는 md5 충돌을 발견 할 기회보다 10 개의 주요 복권을 더 많이 얻을 수있는 기회가 더 많습니다).

당신이 그들을 제거하는 대신 가지고있는 모든 dups를보고 싶다면 unlink $file ~에 부분 print $file, "\n".


1
공백을 잡기 위해 -print0과 xargs-0을 사용할 수 있지만 여기에서도 찾을 수있는 -exec 옵션이 있습니다 : find. -f -exec shasum {} \; | sort ... 또한 : @ F (-a)는 공백 문자와 함께 작동하지 않으므로 사용하면 안됩니다. 대신 substr을 사용하십시오.

잘 했어, 지오 카. 제안 사항에 대한 답변을 업데이트했습니다.

의도적으로 생성 된 충돌이 없다는 것을 안다면 "md5sum (약 50 % 더 빠름)을 사용할 수 있습니다."- 정확하게
Greg Dean

6

나는 사용했다. fdupes (C로 작성) 및 freedups (Perl) 유닉스 시스템에서, 그리고 그들은뿐만 아니라 Windows에서 작동 수도 있습니다; 또한있다 비슷한 것들 Windows에서 작동한다고 주장하는 dupmerge, liten (파이썬으로 작성) 등


Perl과 Python 소프트웨어는 파일 시스템의 세부 사항이 중요하지 않다고 가정하면 Windows와 * nix 시스템에서 똑같이 작동해야합니다.
CarlF

2

Windows에서 중복 이미지를 제거하려면 다음을 확인하십시오. DupliFinder. 이름, 크기 및 실제 이미지 정보와 같은 다양한 기준으로 사진을 비교할 수 있습니다.

중복 파일을 제거하는 다른 도구를 보려면이 Lifehacker를 살펴보십시오. 조.


1

대신 DupliFinder 대신 포크 프로젝트를 사용해보십시오. 데드 린저 . 원래 프로젝트에 많은 버그를 수정하고 새로운 기능을 추가하며 성능을 획기적으로 향상 시켰습니다.


1

하나의 옵션이 될 수 있습니다. Dupkiller .

DupKiller는 컴퓨터에서 중복되거나 유사한 파일을 검색하고 제거하는 가장 빠르고 강력한 도구 중 하나입니다. 검색 메커니즘에 내장 된 복잡한 알고리즘은 고속 결과 검색 - 빠른 파일 검색을 수행합니다. 많은 옵션을 사용하여 검색을 유연하게 사용자 정의 할 수 있습니다.

enter image description here

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.