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

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

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

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

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

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

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

참고할 사항 :

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


답변

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 파일을 포함하여 충분한 변형 이 있습니다 .

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


답변

어프로치

  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:있고 확장자가 jpgpng인 모든 이미지를 해시하려는 경우 다음 명령을 사용하십시오.

    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.