본문 바로가기
카테고리 없음

🧹 오래된 파일 자동 삭제 스크립트

by 쑥스비 2025. 8. 28.

컴퓨터나 서버를 사용하다 보면 어느 순간 "디스크 공간이 부족합니다"라는 알림이 뜨곤 합니다.

특히 오래된 로그 파일, 백업 파일, 다운로드한 자료들이 디스크를 가득 채워 성능 저하까지 유발하죠.

이럴 때 필요한 것이 바로 오래된 파일을 자동으로 삭제해 주는 스크립트입니다.

한 번만 설정해두면 매일/매주 자동으로 불필요한 파일을 정리해 줘서 디스크 공간을 지키는 스마트한 습관이 됩니다.

오래된 파일 자동 삭제 섬네일


📚 목차


📌 오래된 파일 자동 삭제란?

오래된 파일 자동 삭제란, 지정한 경로에서 일정 기간 이상된 파일 또는 빈 폴더를 찾아 자동으로 삭제하는 작업을 의미합니다.

주로 다음 상황에서 활용됩니다:

  • 로그 파일이 계속 쌓이는 서버
  • 다운로드 폴더가 넘쳐나는 PC
  • 백업 공간이 부족한 NAS

⚙️ 스크립트 방식별 비교 (Windows, Linux, Python)

방식 플랫폼 난이도 유연성 자동화 용이성
Batch Windows ★☆☆ ★☆☆ ★★☆
PowerShell Windows ★★☆ ★★★ ★★★
Shell Script Linux ★★☆ ★★★ ★★★
Python Win/Linux/Mac ★★★ ★★★★ ★★★

🧾 1. Windows Batch 스크립트

기본 구조

forfiles /p "C:\\경로" /s /m *.* /D -30 /C "cmd /c del /q @path"
  • 30: 수정된 지 30일 이상된 파일
  • /s: 하위 폴더 포함
  • /C: 명령어 실행

폴더까지 삭제하고 싶다면?

forfiles /p "D:\\경로" /s /d -30 /c "cmd /c if @isdir==TRUE rmdir /S /Q @path"

장점

  • 가볍고 빠름
  • .bat 파일로 바로 실행 가능

단점

  • 정교한 조건 설정이 어려움
  • 로그 기록 불가

🧾 2. PowerShell 자동 삭제 스크립트

A. 기본 스크립트

$path = "C:\\Folder"
$limit = (Get-Date).AddDays(-15)

Get-ChildItem $path -Recurse -Force |
  Where-Object { !$_.PSIsContainer -and $_.CreationTime -lt $limit } |
  Remove-Item -Force

B. 빈 폴더 삭제 포함 + 로그 남기기

$Folder = "D:\\Temp"
$limit = (Get-Date).AddDays(-90)

# 오래된 파일 삭제 + 로그 저장
Get-ChildItem $Folder -Recurse -Force |
  Where-Object { !$_.PSIsContainer -and $_.LastWriteTime -lt $limit } |
  ForEach-Object {
    Remove-Item $_.FullName -Force
    $_.FullName | Out-File C:\\log\\deletedlog.txt -Append
  }

# 빈 폴더 정리
Get-ChildItem $Folder -Recurse -Directory |
  Where-Object { !(Get-ChildItem $_.FullName) } |
  Remove-Item -Force -Recurse

-WhatIf 옵션으로 삭제 전 미리 보기 가능


🐧 3. Linux Shell Script

A. 기본 구조

#!/bin/bash
find /home/user/folder -type f -mtime +30 -exec rm -f {} \;

B. 고급 스크립트 + 로그

#!/bin/bash
target="/var/logs"
find "$target" -type f -mtime +30 -exec rm -f {} \; >> /var/log/deleted_files.log

장점

  • 크론탭 연동 쉬움
  • 서버 운영에 필수

단점

  • 명령어 오타 시 위험
  • sudo 권한 필요할 수 있음

🐍 4. Python 스크립트 (크로스 플랫폼)

import os, time

folder = "C:/your/folder/path"
days = 30
now = time.time()

for file in os.listdir(folder):
    path = os.path.join(folder, file)
    if os.path.isfile(path):
        if now - os.path.getmtime(path) > days * 86400:
            os.remove(path)
            print(f"삭제됨: {path}")

고급 확장 가능

  • 파일 크기 기준 삭제
  • 특정 확장자만 제거
  • 삭제 로그 파일로 저장

⏱ 자동 실행 설정: 작업 스케줄러와 Crontab

Windows 작업 스케줄러

  1. 작업 스케줄러 실행 (taskschd.msc)
  2. 새 작업 생성 → 트리거는 매일/매주
  3. 동작은 .bat 또는 PowerShell 스크립트 지정
  4. "가장 높은 권한으로 실행" 체크

Linux Crontab

crontab -e
# 매일 새벽 2시 실행
0 2 * * * /home/user/delete_script.sh

⚠️ 스크립트 작성 시 주의사항

  • 백업은 필수: 실수로 중요한 파일 삭제될 수 있음
  • 🔍 테스트 모드 우선 실행: echo, WhatIf 활용
  • 📝 삭제 로그 남기기: 나중에 추적 가능
  • 🔐 권한 확인: 관리자 권한 필요시 설정

🙋 자주 묻는 질문 (FAQ)

Q1. 특정 확장자만 삭제할 수 있나요?

가능합니다!

  • Batch: /m *.log
  • PowerShell: Where-Object { $_.Extension -eq ".log" }

Q2. 날짜 기준이 생성일인가요 수정일인가요?

명령어에 따라 다릅니다.

  • forfiles는 기본적으로 수정일 기준
  • PowerShell에서는 CreationTime 또는 LastWriteTime 선택 가능

Q3. Windows에서 빈 폴더도 삭제하려면?

아래 PowerShell 명령을 활용하세요:

Get-ChildItem -Recurse -Directory |
  Where-Object { !(Get-ChildItem $_.FullName) } |
  Remove-Item -Recurse -Force

✅ 결론

파일 정리도 자동화의 시대입니다.

한 번 스크립트를 작성해 두면 매번 파일을 확인하고 삭제할 필요 없이 디스크 공간을 효율적으로 유지할 수 있습니다.

개인적으로는 PowerShell을 가장 즐겨 사용합니다.

윈도우 환경에 최적화되어 있고, 조건 설정도 유연하며, 로그까지 남길 수 있어요.

Linux 서버에서는 쉘 스크립트 + Crontab 조합이 가장 안정적입니다.


📌 요약

구분 플랫폼 삭제 기준 자동화 방법 추천도
Batch Windows 수정일 기준 작업 스케줄러 ⭐⭐⭐
PowerShell Windows 생성/수정일 선택 작업 스케줄러 + 로그 ⭐⭐⭐⭐
Shell Script Linux 수정일(mtime) Crontab ⭐⭐⭐⭐
Python 모두 유연함(초 단위) 스케줄러/Crontab 가능 ⭐⭐⭐⭐

 

필요하시면 각 스크립트의 자동 실행 설정법, 로그 분석법, 실패 시 알림 설정까지 확장해서 도와드릴 수 있으니 언제든 요청해 주세요 😊

정리된 스크립트와 함께, 디스크도 마음도 가볍게 시작해 보세요!