해시로 파일 찾기

해시로 파일 찾기

한 디렉터리(d1)에 x1 파일이 있고 동일한 파일이 다른 디렉터리(d2)에 복사(x2)되었는지 확실하지 않습니다(그러나 응용 프로그램에서 자동으로 이름이 변경되었습니다).

d1 디렉터리에 있는 x1 파일의 해시가 d2 디렉터리에 있는 일부 파일 x2의 해시와 동일한지 확인할 수 있나요?

답변1

이는 좋은 접근 방식이지만 올바른 크기의 파일에 대한 해시만 계산하면 검색 속도가 훨씬 빨라집니다. GNU/BusyBox 유틸리티 사용:

wanted_size=$(stat -c %s d1/x1)
wanted_hash=$(sha256sum <d1/x1)
find d2 -type f -size "${wanted_size}c" -execdir sh -c 'test "$(sha256sum <"$0")" = "$1"' {} "$wanted_hash" \; -print

답변2

알려진 MD5 다이제스트가 있는 디렉토리에서 파일을 찾으려면( bash또는 사용 ksh93):

x1digest="$( md5sum d1/x1 | cut -d ' ' -f 1 )"

for x2 in d2/*; do
    if [[ ! -f "$fpath" ]]; then
      continue
    fi

    x2digest="$( md5sum "$fpath" | cut -d ' ' -f 1 )"

    if [[ "$x2digest" == "$x1digest" ]]; then
      printf '"%s" has the same hash as d1/x1\n' "$fpath"
    fi
done

BSD 시스템 md5sum filename | cut -d ' ' -f 1에서는 md5 -q filename.

관련 정보