PC 용량 확보! 파이썬으로 중복 파일 자동으로 찾아 삭제하기
PC 용량 확보! 파이썬으로 중복 파일 자동으로 찾아 삭제하기 (완성 코드 공개)
"보고서_최종.docx", "보고서_최종_진짜최종.docx", "보고서_최종_수정본.docx"…
이름은 다르지만 내용이 똑같은 파일, 같은 사진을 여러 폴더에 나눠 저장해 놓은 파일, 다운로드 폴더에 같은 파일을 두 번 내려받은 파일… 이런 중복 파일이 쌓이다 보면 어느 순간 PC 용량이 꽉 차버립니다. 파일명이 달라도 내용이 같은 파일을 눈으로 직접 찾는 것은 사실상 불가능합니다. 파이썬을 한 번만 세팅해두면 폴더 안의 중복 파일을 자동으로 찾아내 목록으로 정리하고 안전하게 삭제할 수 있습니다.
1단계: 준비물 설치
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
중복 파일 탐지에는 파이썬 기본 내장 라이브러리만 사용하지만, 결과를 엑셀로 저장하기 위해 아래 라이브러리를 추가로 설치합니다.
pip install pandas openpyxl
💡 중복 판단 기준: 파일명이 달라도 내용이 같으면 중복으로 판단합니다. 파일 내용을 해시(Hash) 값으로 변환해서 비교하기 때문에 파일명, 날짜와 관계없이 바이트 단위로 정확하게 일치하는 파일만 중복으로 처리합니다. 비슷한 파일이 아니라 완전히 동일한 파일만 잡아냅니다.
2단계: 완성 코드
아래 코드를 그대로 복사해서 메모장에 붙여넣고, find_duplicates.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import hashlib
import pandas as pd
from pathlib import Path
from collections import defaultdict
# ① 설정
FOLDER_PATH = r"C:\Users\내이름\Desktop\정리할폴더" # ← 탐색할 폴더 경로
REPORT_PATH = r"C:\Users\내이름\Desktop\중복파일_목록.xlsx" # ← 결과 엑셀 저장 경로
AUTO_DELETE = False # ← True로 바꾸면 중복 파일 자동 삭제 (원본 1개는 보존)
SCAN_SUBDIR = True # ← True: 하위 폴더까지 탐색 / False: 현재 폴더만 탐색
# ② 파일 해시 계산 함수
def get_hash(filepath):
h = hashlib.md5()
with open(filepath, "rb") as f:
while chunk := f.read(8192):
h.update(chunk)
return h.hexdigest()
# ③ 폴더 탐색 및 해시 비교
folder = Path(FOLDER_PATH)
pattern = "**/*" if SCAN_SUBDIR else "*"
hash_map = defaultdict(list)
print(" 📂 파일 탐색 중...")
for file in folder.glob(pattern):
if file.is_file():
try:
file_hash = get_hash(file)
hash_map[file_hash].append(file)
except Exception as e:
print(f" ✘ 읽기 실패: {file.name} → {e}")
# ④ 중복 파일 목록 정리
duplicates = {h: files for h, files in hash_map.items() if len(files) > 1}
print(f" ✔ 탐색 완료: 중복 그룹 {len(duplicates)}개 발견")
if not duplicates:
print("\n✅ 중복 파일이 없습니다. 폴더가 깨끗합니다!")
else:
rows = []
delete_targets = []
for file_hash, files in duplicates.items():
# 가장 오래된 파일(생성일 기준)을 원본으로 보존
files_sorted = sorted(files, key=lambda f: f.stat().st_ctime)
for i, f in enumerate(files_sorted):
role = "✅ 보존 (원본)" if i == 0 else "🗑 삭제 대상"
rows.append({
"구분": role,
"파일명": f.name,
"경로": str(f.parent),
"크기(KB)": round(f.stat().st_size / 1024, 1),
"해시값": file_hash,
})
if i > 0:
delete_targets.append(f)
# ⑤ 엑셀 보고서 저장
df = pd.DataFrame(rows)
df.to_excel(REPORT_PATH, index=False)
print(f" ✔ 중복 목록 저장 완료 → {REPORT_PATH}")
# ⑥ 자동 삭제 (AUTO_DELETE = True인 경우만 실행)
if AUTO_DELETE:
deleted = 0
for target in delete_targets:
try:
target.unlink()
print(f" 🗑 삭제: {target.name}")
deleted += 1
except Exception as e:
print(f" ✘ 삭제 실패: {target.name} → {e}")
print(f"\n✅ 완료! 중복 파일 {deleted}개 삭제, 원본 보존")
else:
print(f"\n✅ 탐색 완료! 삭제 대상 {len(delete_targets)}개")
print(f" 엑셀 목록을 확인 후 AUTO_DELETE = True로 변경하면 자동 삭제됩니다.")
3단계: 실행 방법 (2단계 안전 프로세스)
중복 파일 삭제는 되돌리기 어렵기 때문에 반드시 2단계로 나눠서 진행합니다.
- 코드 ① 설정의
FOLDER_PATH에 정리할 폴더 경로를 입력합니다. AUTO_DELETE = False상태로 먼저 실행합니다. 삭제 없이 탐색만 합니다.
python find_duplicates.py
실행 후 생성된 엑셀 파일을 열어 "✅ 보존 (원본)"과 "🗑 삭제 대상" 목록을 꼼꼼히 확인합니다.
- 목록을 확인하고 문제가 없으면 코드의
AUTO_DELETE = False를AUTO_DELETE = True로 변경한 뒤 다시 실행합니다.
정상 실행 시 터미널에 이렇게 출력됩니다:
📂 파일 탐색 중... ✔ 탐색 완료: 중복 그룹 5개 발견 ✔ 중복 목록 저장 완료 → C:\Users\내이름\Desktop\중복파일_목록.xlsx 🗑 삭제: 보고서_최종_수정본.docx 🗑 삭제: 보고서_최종_진짜최종.docx 🗑 삭제: IMG_20260501(1).jpg 🗑 삭제: 발표자료_복사본.pptx ✅ 완료! 중복 파일 4개 삭제, 원본 보존
각 중복 그룹에서 가장 먼저 만들어진 파일(원본)은 반드시 보존하고 나머지만 삭제합니다.
4단계: 자주 발생하는 오류와 해결법
오류 1: PermissionError
삭제하려는 파일이 현재 다른 프로그램에서 열려 있거나, 시스템 보호 파일인 경우 발생합니다. 해당 파일을 사용 중인 프로그램을 먼저 닫은 후 다시 실행하세요. 시스템 폴더(C:\Windows 등)는 탐색 대상에서 제외하는 것을 권장합니다.
오류 2: 탐색 시간이 너무 오래 걸림
파일 수가 수만 개 이상이거나 대용량 파일이 많은 경우 해시 계산에 시간이 걸립니다. SCAN_SUBDIR = False로 변경해 현재 폴더만 먼저 탐색하고, 하위 폴더를 나눠서 진행하세요.
오류 3: 삭제했는데 용량이 줄지 않음
파이썬의 unlink()는 파일을 영구 삭제합니다. 그런데 윈도우 탐색기에서 용량이 즉시 반영되지 않을 수 있습니다. 탐색기를 새로 고침(F5)하거나 PC를 재시작하면 정확한 용량이 표시됩니다.
응용: 특정 확장자만 골라서 탐색하고 싶다면
이미지 파일만, 또는 문서 파일만 골라서 중복을 탐색하고 싶다면 코드 ③ 탐색 부분에 확장자 필터를 추가하세요.
EXTENSIONS = {".jpg", ".jpeg", ".png", ".gif"} # ← 탐색할 확장자 목록
for file in folder.glob(pattern):
if file.is_file() and file.suffix.lower() in EXTENSIONS: # 확장자 필터 추가
try:
file_hash = get_hash(file)
hash_map[file_hash].append(file)
💡 이전 게시글과 결합하면: 파일 키워드 자동 분류 편으로 먼저 파일을 폴더별로 정리한 뒤, 이 스크립트로 중복 파일을 제거하면 PC를 깔끔하게 정리할 수 있습니다.
핵심 요약
- 준비물: Python + pandas + openpyxl 설치 (pip install pandas openpyxl)
- 설정: FOLDER_PATH(탐색 폴더)와 REPORT_PATH(결과 저장 경로)만 수정
- 실행 순서: AUTO_DELETE = False로 목록 확인 → 확인 후 AUTO_DELETE = True로 삭제
- 결과: 파일명과 무관하게 내용 기준으로 중복 탐지, 원본 보존 후 나머지만 삭제
이 코드를 응용하면 네트워크 드라이브나 외장 하드까지 범위를 넓혀 탐색하는 것도 가능합니다.
