중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날

이미지
중복 파일 삭제 스크립트를 돌렸다가 식은땀 흘린 날 이 블로그의 중복 파일 자동 삭제 편 과 파일명 일괄 변경 편 을 보면 공통적으로 "DRY_RUN"이라는 안전장치가 들어 있습니다. 실제 삭제나 변경 전에 미리보기부터 하도록 만든 이 습관은, 사실 처음부터 있던 게 아니라 한 번의 아찔한 경험 뒤에 생긴 것입니다. 당시 상황은 이랬습니다. 다운로드 폴더가 오래 방치되어 있어 용량을 확인해보니 중복 파일이 상당히 많았고, "파일 해시값을 비교해서 중복이면 자동으로 지우는" 스크립트를 처음 짜서 바로 실행했습니다. 사건 발생 — 실행 버튼을 누른 직후 처음 짠 코드는 대략 이런 형태였습니다. import hashlib from pathlib import Path from collections import defaultdict folder = Path(r"C:\Users\내이름\Downloads") hash_map = defaultdict(list) def get_hash(filepath): h = hashlib.md5() with open(filepath, "rb") as f: h.update(f.read()) return h.hexdigest() for file in folder.rglob("*"): if file.is_file(): hash_map[get_hash(file)].append(file) # 중복이면 첫 번째만 남기고 나머지 삭제 for files in hash_map.values(): if len(files) > 1: for f in files[1:]: f.unlink() # ← 바로 삭제 실행 print(f"삭제: {f.name}") 실행하자마자 터미널에 "삭제: ......

어떤 폴더가 용량을 다 먹고 있을까? 파이썬으로 자동 분석하기

어떤 폴더가 용량을 다 먹고 있을까? 파이썬으로 자동 분석하기 (완성 코드 공개)

파이썬으로 폴더별 용량을 자동으로 분석하고 시각화하는 모습


"디스크 용량이 거의 다 찼는데 어떤 폴더가 그렇게 큰지 모르겠다", "다운로드 폴더가 너무 커진 것 같은데 안의 어떤 하위 폴더가 문제인지 확인하고 싶다", "여러 드라이브의 용량 현황을 정리해서 보고하고 싶다"…

윈도우 탐색기에서 폴더를 하나씩 클릭해 속성을 확인하는 방법은 폴더가 많을수록 시간이 오래 걸립니다. 파이썬을 한 번만 세팅해두면 폴더 전체를 한 번에 스캔해서 용량이 큰 순서대로 정렬하고, 차트로 시각화해서 한눈에 파악할 수 있습니다.


1단계: 준비물 설치

파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.

용량 분석과 시각화에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:

pip install pandas openpyxl matplotlib

pandas는 분석 결과를 정리하고 엑셀로 저장하는 데 사용합니다. matplotlib은 용량 데이터를 막대 차트 이미지로 시각화하는 데 사용합니다. 용량 계산 자체는 파이썬 기본 내장 기능(pathlib, os)으로 처리합니다.

💡 이 코드로 할 수 있는 것: 지정한 폴더의 하위 폴더별 용량을 모두 계산해 큰 순서대로 정렬, 결과를 엑셀로 저장, 상위 10개 폴더를 막대 차트로 시각화합니다. 폴더 안에 폴더가 아무리 깊게 있어도 모두 합산해서 계산합니다.

2단계: 완성 코드

아래 코드를 그대로 복사해서 메모장에 붙여넣고, folder_size.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.

from pathlib import Path
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm

# ① 설정
TARGET_FOLDER = r"C:\Users\내이름\Desktop"        # ← 분석할 폴더 경로
OUTPUT_EXCEL  = r"C:\Users\내이름\Desktop\용량분석_결과.xlsx"
OUTPUT_CHART  = r"C:\Users\내이름\Desktop\용량분석_차트.png"
DEPTH         = 1   # ← 분석할 하위 폴더 깊이 (1: 바로 아래 폴더만, 2: 그 아래까지)
TOP_N         = 15  # ← 차트에 표시할 상위 폴더 개수

# ② 한글 폰트 설정 (차트용)
font_path = "C:/Windows/Fonts/malgun.ttf"
if Path(font_path).exists():
    font = fm.FontProperties(fname=font_path)
    plt.rcParams["font.family"] = font.get_name()
plt.rcParams["axes.unicode_minus"] = False

# ③ 폴더 용량 계산 함수 (재귀적으로 모든 하위 파일 합산)
def get_folder_size(path):
    total = 0
    try:
        for item in path.rglob("*"):
            if item.is_file():
                try:
                    total += item.stat().st_size
                except (PermissionError, OSError):
                    pass
    except (PermissionError, OSError):
        pass
    return total

def format_size(bytes_size):
    """바이트를 읽기 쉬운 단위로 변환"""
    for unit in ["B", "KB", "MB", "GB"]:
        if bytes_size < 1024:
            return f"{bytes_size:.1f}{unit}"
        bytes_size /= 1024
    return f"{bytes_size:.1f}TB"

# ④ 지정한 깊이까지 폴더 목록 수집
target = Path(TARGET_FOLDER)
folders_to_check = []

if DEPTH == 1:
    folders_to_check = [f for f in target.iterdir() if f.is_dir()]
else:
    for f in target.iterdir():
        if f.is_dir():
            folders_to_check.append(f)
            for sub in f.iterdir():
                if sub.is_dir():
                    folders_to_check.append(sub)

print(f"  📂 분석할 폴더: {len(folders_to_check)}개\n")

# ⑤ 각 폴더 용량 계산
results = []
for i, folder in enumerate(folders_to_check, 1):
    size_bytes = get_folder_size(folder)
    results.append({
        "폴더경로": str(folder),
        "폴더명":   folder.name,
        "용량(바이트)": size_bytes,
        "용량(읽기쉬운형태)": format_size(size_bytes),
    })
    print(f"  ✔ [{i}/{len(folders_to_check)}] {folder.name}: {format_size(size_bytes)}")

# ⑥ 용량 큰 순서로 정렬
df = pd.DataFrame(results).sort_values("용량(바이트)", ascending=False).reset_index(drop=True)
df["용량(MB)"] = (df["용량(바이트)"] / 1024 / 1024).round(1)
df["용량(GB)"] = (df["용량(바이트)"] / 1024 / 1024 / 1024).round(2)

# ⑦ 엑셀로 저장
df.to_excel(OUTPUT_EXCEL, index=False)
print(f"\n  ✔ 엑셀 저장 완료 → {OUTPUT_EXCEL}")

# ⑧ 상위 N개 폴더 막대 차트 생성
top_df = df.head(TOP_N).sort_values("용량(MB)")   # 차트는 작은 값이 위로 가도록 역순

fig, ax = plt.subplots(figsize=(10, 8))
ax.barh(top_df["폴더명"], top_df["용량(MB)"], color="#4a90d9")
ax.set_xlabel("용량 (MB)", fontsize=12)
ax.set_title(f"상위 {TOP_N}개 폴더 용량 분석", fontsize=16, pad=15)
ax.grid(axis="x", linestyle="--", alpha=0.5)
plt.tight_layout()
plt.savefig(OUTPUT_CHART, dpi=150, bbox_inches="tight")
print(f"  ✔ 차트 저장 완료 → {OUTPUT_CHART}")

total_size = df["용량(바이트)"].sum()
print(f"\n✅ 완료! 전체 용량: {format_size(total_size)} / 분석 폴더: {len(df)}개")

3단계: 실행 방법

  1. 코드 ① 설정의 TARGET_FOLDER에 분석할 폴더 경로를 입력합니다.
  2. DEPTH를 1로 두면 바로 아래 폴더들만, 2로 두면 그 하위 폴더까지 분석합니다.
  3. 터미널에서 아래 명령어로 실행합니다:
python folder_size.py

정상 실행 시 터미널에 이렇게 출력됩니다:

  📂 분석할 폴더: 12개

  ✔ [1/12] 다운로드: 8.4GB
  ✔ [2/12] 문서: 1.2GB
  ✔ [3/12] 사진: 24.7GB
  ...

  ✔ 엑셀 저장 완료 → C:\Users\내이름\Desktop\용량분석_결과.xlsx
  ✔ 차트 저장 완료 → C:\Users\내이름\Desktop\용량분석_차트.png

✅ 완료! 전체 용량: 48.3GB / 분석 폴더: 12개

엑셀 파일에는 폴더별 용량이 큰 순서로 정렬되어 저장되고, 차트 이미지에는 상위 폴더들이 막대 그래프로 시각화되어 한눈에 어떤 폴더가 용량을 많이 차지하는지 확인할 수 있습니다.


4단계: 자주 발생하는 오류와 해결법

오류 1: 분석이 너무 오래 걸림

폴더 안에 파일 수가 매우 많거나(수십만 개) 네트워크 드라이브를 분석할 때 시간이 오래 걸립니다. DEPTH를 1로 줄이거나, 분석할 폴더를 더 세분화해서 나눠 실행하세요.

오류 2: PermissionError가 계속 출력됨

시스템 보호 폴더나 다른 사용자 권한의 폴더에 접근할 때 발생합니다. 코드에 이미 예외 처리가 포함되어 있어 해당 폴더는 0바이트로 건너뛰고 계속 진행됩니다. 정확한 용량이 필요하다면 관리자 권한으로 터미널을 실행하세요.

오류 3: 차트에 한글이 깨져서 네모(□)로 표시됨

한글 폰트 경로가 없을 때 발생합니다. C:\Windows\Fonts\malgun.ttf 파일이 실제로 존재하는지 확인하세요. 없다면 gulim.ttc로 경로를 바꿔서 시도해보세요.


응용: 특정 확장자만 따로 용량 분석하기

동영상, 사진 등 특정 확장자가 차지하는 용량만 따로 분석하고 싶다면 코드 ③ 함수를 아래처럼 수정하세요.

TARGET_EXTENSIONS = {".mp4", ".mov", ".avi"}   # ← 분석할 확장자만 지정

def get_folder_size_by_ext(path, extensions):
    total = 0
    for item in path.rglob("*"):
        if item.is_file() and item.suffix.lower() in extensions:
            try:
                total += item.stat().st_size
            except (PermissionError, OSError):
                pass
    return total
💡 이전 게시글과 결합하면: 용량이 큰 폴더를 찾았다면 중복 파일 자동 삭제 편으로 정리하거나, ZIP 자동 압축 편으로 압축해서 공간을 확보할 수 있습니다.

핵심 요약

  • 준비물: Python + pandas + openpyxl + matplotlib 설치 (pip install pandas openpyxl matplotlib)
  • 설정: TARGET_FOLDER, DEPTH(분석 깊이), TOP_N(차트 표시 개수) 수정
  • 실행: 터미널에서 python folder_size.py 입력
  • 결과: 폴더별 용량이 큰 순서로 정리된 엑셀, 상위 폴더 막대 차트 이미지 자동 생성

이 코드를 응용하면 여러 드라이브를 동시에 분석하거나, 일정 기간 동안 폴더 용량 변화를 추적하는 것도 가능합니다.

이 블로그의 인기 게시물

느려진 구글 크롬 속도 2배 빨라지는 3가지 설정 방법 (2026년 최신 가이드)

카카오톡 용량 줄이기! 대화방 파일 삭제로 스마트폰 용량 확보법 (1분 해결)

업무 속도 3배 빨라지는 윈도우 기본 캡처 도구 단축키 및 200% 활용 꿀팁