2012-03-01 10 views
1

이것은 파이썬 코딩 경쟁에 등장한 질문이었고 어떻게 달성 될 수 있는지 궁금해졌습니다.Python을 사용하여 중복 파일 찾기

문제 문 :

당신은 (그것을 가능 하위 디렉토리와 함께) 두 개의 디렉토리가 있습니다. 이어야 하나 같은 파일 이름의 내용이

PASS 다른 경우 : FAIL : 그렇지 않으면

을 여기 스크립트는

결과는 두 개의 루트 디렉토리에 같은 파일 이름의 내용을 비교하여 중복 파일을 찾을 수 있어야 샘플 그림

/dir1      /dir2 
     -- file1     -- file1 
     -- file2     -- fileA 
     -- file3     -- fileB 
     -- .... 
     -- ... 
     ---/subDir1 
      --file1 
      --file2 

file1 of dir1 contains :- foo bar 
file1 of dir2 contains :- foo 
Result - Fail 

file1 of dir1 contains :- foo bar 
file1 of dir2 contains :- foo bar 
Result - Pass. 

나는 파일 크기에 의해 해시를 사용하여 시도,하지만 분명히하지 않는 방법이었다 :)

PS : 모든 스크립팅 언어를 사용할 수 있습니다.

감사 켈리

+1

나는 방법을 설명하려고했으나 완전한 프로그램 인 http://www.ssokolow.com/scripts/fastdupes.py를 참조하는 것이 더 낫다고 생각한다. (필자는 쓰지 않았지만 수정 한 것을 사용한다. 그것의 버전), 그것을 보는 것은 그것이 어떻게 작동하는지 설명하려고 시도하는 것보다 나을 것입니다. –

답변

3

당신은 계층 형 방식으로이 문제를 해결할 수 있습니다.

  1. 각 dir/subdir을 통해 파일 크기를 비교하십시오.
  2. 파일 크기가 = 다른 경우
  3. 은> SHA1이 일치하는 파일의 내용 의 바이트을 비교 한에 의해 바이트를 않는 해시 경우 =>
  4. 실패
  5. 계산 각 파일의 SHA1 해시가 일치하지 않는 경우 실패 절대적으로 확실하다.
+0

의사 코드를 제공해 주시겠습니까? 나는 여기에 주어진 게시물을 따르고 있지만 결과를 얻을 수 없습니다. http://code.activestate.com/recipes/362459-dupinator-detect-and-delete-duplicate-files/ – Kelly

1

표준 라이브러리의 filecmp module을 살펴보십시오.

컴퓨팅 해시는 각 파일을 다른 파일과 비교할 때 유용하지 않습니다. 해시를 계산하려면 전체 파일을 읽어야하고 일치하는 항목을 다시 읽어야합니다. 대조적으로 직접 비교는 첫 번째 차이에서 중단 될 수 있습니다.

관련 문제