검색 결과를 캐싱하는 동안 정확한 중복 파일을 제거하는 프로그램


2

중복을 제거 / 확인하려면 Windows 7 프로그램이 필요하지만 프로그램이 충분한 표준 상황과는 약간 다릅니다.

우리는 여러 디스크에 분산 된 상당히 큰 정적 사진 아카이브 (컬렉션)를 보유하고 있습니다. 디스크 A..M이라고하겠습니다. 디스크 A..M에 있는 일부 복제본이 포함 된 디스크 (디스크 1..9라고 함)도 있습니다.

디스크 1..9의 사진을 포함 할 새 디스크 (N, O, P ... aso.)를 컬렉션에 추가하려고하지만 물론 두 장 이상의 사진을 갖고 싶지는 않습니다. ) 번.

물론 이론적으로는 정기적 인 파일 복제 리무버를 사용하여 작업을 해결할 수 있지만 필요한 시간은 매우 큽니다.

이상적으로 AFAIS의 실제 솔루션은 디스크 A..M을 스캔하고 사진의 파일 크기 / 해시를 인덱스 데이터베이스 / 파일에 저장하고 새 디스크를 검사하는 프로그램입니다 (1 .. 9)이 데이터베이스에 대해

그러나 그러한 프로그램을 찾는 데 어려움이 있습니다 (존재하는 경우).

참고할 사항 :

  • Disks A..M (컬렉션)에는 복제본이 없다고 생각합니다
  • 파일 이름이 변경되었을 수 있습니다
  • 우리는 일부 사진 비교 프로그램에서 찾을 수있는 대략적인 (퍼지) 비교에 관심이 없습니다. 우리는 정확한 중복 파일을 찾습니다.
  • 우리는 명령 행을 두려워하지 않습니다. :-)
  • 우리는 Win7 / XP에서 작업해야합니다
  • 우리는 물론 프리웨어를 선호합니다

디스크 A..M에 몇 개의 파일과 바이트가 있습니까?
— Dennis

@Dennis : 정확한 숫자가 필요하십니까? ~ 4-5TB를 차지하는 400-500k 파일
— John Thomas

나는 몇 가지 도구를 시도했지만 (대부분 이미 여기에 나열되어 있음 ) 원하는 것을 정확하게 수행 하는 것은 없습니다 . 커맨드 라인 기반 접근 방식이 아마도 가장 좋은 해결책 일 수 있지만 제안하기 위해서는 추가 정보가 필요합니다. 1) 디스크에 동시에 액세스 할 수 있습니까? 2) A..M 및 1..9 디스크는 대략 몇 개입니까? 3) 이것은 일회성입니까, 아니면 나중에 사용하기 위해 데이터베이스를 저장 하시겠습니까?
— Dennis

응답 : 1.) 아니요, 디스크에 동시에 액세스 할 수 없습니다. 그러나 아마도 kludge가 사용될 수 있습니다. 2.) 이제 5 개의 디스크가 정상이지만 (예에서는 디스크 A..M) 검사해야 할 "알 수없는"디스크 수가 있습니다. 그러나이 디스크의 수 (예에서는 IOW 0..9 디스크)를 5-6으로 추정합니다. 3.) 예, 나중에 사용하기 위해 db를 저장하고 싶습니다. 그러나 나는 "주 청소"가 한 번만 일어날 것이라고 생각한다.
— John Thomas

1
그리고 누군가가 필요에 일어나처럼 보이는 것을 발견 : duplicate-file-detective.com/v4/new.htm를 (내가 한 하지 이것을 시도, 난 그냥 우연히.)
— 로렌 Pechtel

답변:


4

Dennis 솔루션을 기반으로 Windows에서도 사용 가능한 hashdeep suite 를 사용하기로 결정했습니다 .

기본 사용법 :

1 단계. 해시 생성 (한 번만 수행해야 함)

hashdeep64 -c tiger -r "D:\*" > Disk_D.hash

우리는 호랑이 를 해시 함수로 사용합니다 -SHA-1보다 빠르고 빠릅니다 (충돌 없음).

2 단계 : 중복 사냥 (각 드라이브 / 디렉토리마다 점검해야 함)

hashdeep64 -k Disk_D.hash -m -r "E:\My-Dir-To-Check\*" > Dupes.txt

이제 모든 복제본이 Dupes.txt

del파일을 삭제하기 위해 MsWord, LibreOffice 또는 Notepad ++ (또는 다른 방법 )을 사용하여이 텍스트 파일에 삽입 (및 / 또는 다른 옵션) 을 삽입 할 수 있습니다. 여기 에는 모든 항목을 삭제하기 위해 파일 목록을 스캔하는 간단한 .bat 파일을 포함하여 충분한 변형 이 있습니다 .

또한 파일 목록을 검토하고 수동으로 처리를 수행 할 수 있습니다.


2

어프로치

  1. 충돌없는 해시 기능을 선택하십시오.

    병목 현상이 하드 드라이브가 될 것이기 때문에 내 예제에서는 SHA1을 사용합니다.

    시간이 너무 오래 걸리면 파일의 첫 번째 MB 만 비교할 수 있습니다. 그것은 이미지에 충분 해야 합니다.

  2. 디스크 A..M에서 관심있는 파일을 읽고 해시를 계산하여 해당 디스크에 특정한 파일에 저장하십시오 (나중에 디스크를 추가 / 제거 할 수 있음).

  3. 디스크 1..9에서 관심있는 파일을 읽고 해시를 계산하십시오.

    파일의 해시가 이미 알려진 경우 조치를 수행하십시오 (목록 또는 삭제).

설정

  1. Windows 용 Linux 룩앤필 환경을 제공하는 도구 모음 인 Cygwin을 다운로드하여 설치 하십시오.

  2. Windows 탐색기에서 폴더를 엽니 다 %ProgramFiles(x86)%\Cygwin\home\%USERNAME%.

  3. 파일을 편집하고 .bashrc다음 줄을 추가하십시오.

    export PATH=~:$PATH
    
  4. 라는 파일을 작성 hashdrive하고 다음 코드를 저장하십시오.

    #!/bin/bash
    
    DRIVELETTER=$(echo $1 | tr '[:upper:]' '[:lower:]')
    EXTENSIONS=$(echo $2 | sed 's/,/\\|/g')
    DRIVENAME=$(echo $3 | tr '[:upper:]' '[:lower:]')
    
    set -e
    [ -d /cygdrive/$DRIVELETTER ] || (echo "Drive $DRIVELETTER: does not exist." ; exit 1)
    [ -f ~/drives/$DRIVENAME ] && (echo "Hashfile for drive $DRIVENAME already exists." ; exit 1)
    set +e
    
    mkdir ~/drives 2>/dev/null
    find /cygdrive/$DRIVELETTER -type f -iregex ".*\.\($EXTENSIONS\)" -exec sha1sum {} \; | cut -b -40 > ~/drives/$DRIVENAME
    
  5. 라는 파일을 작성 checkdrive하고 다음 코드를 저장하십시오.

    #!/bin/bash
    
    DRIVELETTER=$(echo $1 | tr '[:upper:]' '[:lower:]')
    EXTENSIONS=$(echo $2 | sed 's/,/\\|/g')
    ACTION=$(echo $3 | tr '[:upper:]' '[:lower:]')
    
    set -e
    [ -d /cygdrive/$DRIVELETTER ] || (echo "Drive $DRIVELETTER: does not exist." ; exit 1)
    set +e
    
    IFS=":" ; for FILE in `find /cygdrive/$DRIVELETTER -type f -iregex ".*\.\($EXTENSIONS\)" -printf %p:`; do
        [ "$(grep -m 1 $(sha1sum "$FILE" | cut -b -40) ~/drives/*)" ] && $ACTION "$FILE"
    done
    

용법

  • 특정 디스크의 모든 이미지 해시를 파일로 저장하려면 Cygwin을 시작하고 다음 명령을 실행하십시오.

    hashdrive DRIVELETTER EXTENSIONS DRIVENAME
    

    예를 들어 DiskA가 드라이브로 마운트되어 D:있고 확장자가 jpg및 png인 모든 이미지를 해시하려는 경우 다음 명령을 사용하십시오.

    hashdrive d jpg,png diska
    

    이 없어야합니다 어떤 공간 jpg,png.

  • 디스크에 중복 이미지가 있는지 확인하려면 Cygwin을 시작하고 다음 명령을 실행하십시오.

    hashdrive DRIVELETTER EXTENSIONS ACTION
    

    예를 들어, Disk1이 드라이브로 마운트되어 E:있고 확장자가 jpg이고 중복 된 모든 이미지를 나열 png하려면 다음 명령을 사용하십시오.

    checkdrive e jpg,png echo
    

    파일을 직접 제거하려면 rm대신을 사용하십시오 echo.

  • 데이터베이스에서 디스크를 제거하려면 DRIVENAME폴더 에서 파일 을 삭제하십시오 %ProgramFiles(x86)%\Cygwin\home\%USERNAME%\drive.

주의

이 rm명령은 파일을 휴지통으로 이동 하지 않습니다 . 직접 삭제합니다.

어쨌든 파일을 복구 할 수는 있지만 rm조치 echo를 사용할 때주의 하고 사용하기 전에 시도하십시오 rm.


혼합 결과가 나타납니다. 내 Linux 시스템에서는 Win7 시스템보다 9 배 빠르게 실행됩니다. 나는 희망 이 리눅스 시스템의 하드 드라이브가 빠르다는 사실 때문이다,하지만 일이와 부드러운 실행 가능성도 실제 리눅스. 가능한 개선 사항 : 1) hashdrive너무 느리게 실행 되면 (여기에서 확인할 방법이 없습니다) 각 파일의 첫 번째 메가 바이트 만 해시하여 더 빠르게 만들 수 있습니다. 그것은 이미지에 충분 해야 합니다. 2) checkdrive버킷에 해시를 그룹화하여 더 빠르게 만들 수 있습니다. 시장에 영향을 미치는지 여부를 테스트합니다.
— Dennis

고마워-귀하의 솔루션을 느슨하게 따라 전체 / 기본 Windows 솔루션을 게시했습니다 (해시 딥은 * nixes에서도 실행되기 때문에 실제로 크로스 플랫폼입니다). 또한 명령이 매우 간단하기 때문에 명령을 .bat 파일로 캡슐화하지 않기로 선택했습니다. 어쨌든 대단히 감사합니다. 공감.
— John Thomas

Btw, Dennis SHA-1은 충돌이 없습니다. en.wikipedia.org/wiki/Sha-1 ...을 참조하십시오 . 그러나 일상적인 파일 작업이면 충분합니다. 나는 속도 향상을 위해 호랑이를 선택했습니다.
— John Thomas

SHA-1은 고장 났지만 (80 비트의 초기 보안 클레임은 53 비트로 줄었습니다) 실제 충돌은 발견되지 않았습니다.
— Dennis
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.