컴퓨터나 서버를 사용하다 보면 어느 순간 "디스크 공간이 부족합니다"라는 알림이 뜨곤 합니다.
특히 오래된 로그 파일, 백업 파일, 다운로드한 자료들이 디스크를 가득 채워 성능 저하까지 유발하죠.
이럴 때 필요한 것이 바로 오래된 파일을 자동으로 삭제해 주는 스크립트입니다.
한 번만 설정해두면 매일/매주 자동으로 불필요한 파일을 정리해 줘서 디스크 공간을 지키는 스마트한 습관이 됩니다.
📚 목차
- 오래된 파일 자동 삭제란?
- 스크립트 방식별 비교 (Windows, Linux, Python)
- 1. Windows Batch 스크립트
- 2. PowerShell 자동 삭제 스크립트
- 3. Linux Shell Script
- 4. Python 스크립트 (크로스 플랫폼)
- 자동 실행 설정: 작업 스케줄러와 Crontab
- 스크립트 작성 시 주의사항
- 자주 묻는 질문 (FAQ)
- 결론
- 요약
📌 오래된 파일 자동 삭제란?
오래된 파일 자동 삭제란, 지정한 경로에서 일정 기간 이상된 파일 또는 빈 폴더를 찾아 자동으로 삭제하는 작업을 의미합니다.
주로 다음 상황에서 활용됩니다:
- 로그 파일이 계속 쌓이는 서버
- 다운로드 폴더가 넘쳐나는 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 작업 스케줄러
작업 스케줄러
실행 (taskschd.msc
)- 새 작업 생성 → 트리거는 매일/매주
- 동작은
.bat
또는 PowerShell 스크립트 지정 - "가장 높은 권한으로 실행" 체크
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 가능 | ⭐⭐⭐⭐ |
필요하시면 각 스크립트의 자동 실행 설정법, 로그 분석법, 실패 시 알림 설정까지 확장해서 도와드릴 수 있으니 언제든 요청해 주세요 😊
정리된 스크립트와 함께, 디스크도 마음도 가볍게 시작해 보세요!