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


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:있고 확장자가 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.


혼합 결과가 나타납니다. 내 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.