SameOS ~/tools/hash-checker.md

SHA-256 해시값으로 중복 이미지와 파일 찾기

파일명, 촬영일, 확장자가 달라도 실제 바이트 내용이 같으면 같은 파일입니다. 해시값(파일 내용 전체를 짧은 고유값으로 요약한 일종의 지문)을 비교하면 이름이 달라도 중복 파일을 정확히 가려낼 수 있습니다.

이미지 수집 폴더에서는 같은 사진이 JPG와 WEBP처럼 다른 형식으로 저장될 수도 있습니다. 이 경우 바이트가 다르므로 해시값도 다릅니다. 반대로 같은 파일을 다른 이름으로 저장했다면 해시값은 같습니다.

운영 팁

대량 파일을 정리할 때는 먼저 파일 크기로 후보를 좁히고, 같은 크기의 파일끼리 해시를 비교하면 디스크 읽기 부담을 줄일 수 있습니다. 삭제 전에는 원본 폴더, 썸네일 폴더, 백업 폴더가 함께 정리되는지 확인해야 합니다.

줄바꿈 1바이트가 해시를 바꾸는 예시

줄바꿈도 파일을 구성하는 1바이트입니다. 같은 글자로 보이는 두 입력이 실제로 얼마나 다른 결과를 만드는지 비교했습니다.

sameos + 줄바꿈(LF), 7바이트

예시 조건
printf 'sameos\n' | sha256sum
계산·출력 결과
adfe9ec4e80b11fe6466e663e37a9037947e177f1007fb168c1d4b6306d7d9e7

같은 7바이트를 가진 파일은 이름이 달라도 이 값이 동일하게 나옵니다.

sameos, 줄바꿈 없음, 6바이트

예시 조건
printf 'sameos' | sha256sum
계산·출력 결과
a4d76f82fff5ec89c9a0135a5f0ac56f0b53c3408f3ac1de2db5b0670b4b6408

화면상 거의 같아 보여도 마지막 1바이트가 달라지면 해시 전체가 바뀝니다.

명령줄에서 중복 파일 한 번에 찾기

파일이 수천 개면 브라우저보다 명령어 한 줄이 빠릅니다. 내용이 같으면 해시가 같다는 성질을 그대로 씁니다.

# sha256sum 은 리눅스·맥에 기본 설치돼 있습니다 (윈도우는 아래 4번)

# 1) 폴더 안 모든 파일의 해시를 구해, 같은 것(중복)만 출력
sha256sum * | sort | uniq -w64 -D
#    -w64  → 해시 앞 64자만 비교 (파일명은 무시)
#    -D    → 중복된 것만 보여줌

# 2) 출력 읽는 법 — 앞 64자가 같은 두 줄 = 내용이 똑같은 파일
# e3b0c44298fc1c14...  photo.jpg
# e3b0c44298fc1c14...  photo_복사본.jpg
#    이름은 달라도 내용이 같으니 하나만 남기면 됩니다

# 3) 하위 폴더까지 전부 훑기
find . -type f -exec sha256sum {} + | sort | uniq -w64 -D

# 4) 윈도우(파워셸)라면
Get-FileHash *.jpg -Algorithm SHA256 | Group-Object Hash | Where-Object Count -gt 1