중복을 제거 / 확인하려면 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 파일을 포함하여 충분한 변형 이 있습니다 .
또한 파일 목록을 검토하고 수동으로 처리를 수행 할 수 있습니다.
답변
어프로치
-
충돌없는 해시 기능을 선택하십시오.
병목 현상이 하드 드라이브가 될 것이기 때문에 내 예제에서는 SHA1을 사용합니다.
시간이 너무 오래 걸리면 파일의 첫 번째 MB 만 비교할 수 있습니다. 그것은 이미지에 충분 해야 합니다.
-
디스크 A..M에서 관심있는 파일을 읽고 해시를 계산하여 해당 디스크에 특정한 파일에 저장하십시오 (나중에 디스크를 추가 / 제거 할 수 있음).
-
디스크 1..9에서 관심있는 파일을 읽고 해시를 계산하십시오.
파일의 해시가 이미 알려진 경우 조치를 수행하십시오 (목록 또는 삭제).
설정
-
Windows 용 Linux 룩앤필 환경을 제공하는 도구 모음 인 Cygwin을 다운로드하여 설치 하십시오.
-
Windows 탐색기에서 폴더를 엽니 다
%ProgramFiles(x86)%\Cygwin\home\%USERNAME%
. -
파일을 편집하고
.bashrc
다음 줄을 추가하십시오.export PATH=~:$PATH
-
라는 파일을 작성
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
-
라는 파일을 작성
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
.