우분투 실전 명령어 | find로 오래된 파일 정리와 안전 삭제

언제 쓰는가

운영 서버를 오래 돌리면 로그, 임시 파일, 오래된 백업이 쌓이면서 디스크가 빠르게 줄어듭니다. 이럴 때 find 하나로 조건에 맞는 파일을 먼저 확인하고, 검토 후 정리하면 사고 없이 공간을 회수할 수 있습니다.

바로 쓰는 명령어

# 30일 이상 지난 .log 파일 후보 확인
find /var/log -type f -name "*.log" -mtime +30 -print

# 500MB 이상 대용량 파일 찾기
find / -xdev -type f -size +500M -print 2>/dev/null

# 14일 이상 지난 tmp 파일 삭제
find /tmp -type f -name "*.tmp" -mtime +14 -delete
# 삭제 대신 백업 디렉터리로 이동
mkdir -p /data/cleanup-archive
find /var/tmp -type f -mtime +7 -print0 | xargs -0 -I{} mv "{}" /data/cleanup-archive/

# 최근 24시간 내 변경 파일만 확인
find /etc -type f -mtime -1 -print

핵심 옵션/패턴

  • -type f: 일반 파일만 대상으로 제한한다.
  • -mtime +N: N일보다 오래된 파일을 찾는다. 예를 들어 +7은 8일 이상 지난 파일이다.
  • -size +500M: 지정 크기보다 큰 파일을 찾는다. k, M, G 단위를 함께 쓸 수 있다.
  • -xdev: 다른 마운트 포인트로 내려가지 않게 막는다. 루트 전체 탐색 시 유용하다.
  • -print0 | xargs -0: 공백, 한글, 특수문자가 포함된 파일명도 안전하게 처리한다.
  • -delete: 즉시 삭제한다. 반드시 같은 조건으로 -print를 먼저 실행해 범위를 검증한다.

명령 출력 예시

$ find /var/log -type f -name "*.log" -mtime +30 -print
/var/log/nginx/access.log.5
/var/log/nginx/error.log.5
/var/log/myapp/app-2025-12-01.log
$ find / -xdev -type f -size +500M -print 2>/dev/null
/var/lib/docker/overlay2/8f.../diff/app/cache.dump
/opt/backup/full-2026-01-15.tar.gz

자주 하는 실수

  • 실수 1: -delete를 처음부터 붙여 실행한다. 조건 오타가 있으면 복구가 어렵다.
  • 실수 2: / 경로 탐색에서 -xdev를 빼서 NFS, 외장 볼륨, 컨테이너 마운트까지 뒤지느라 시간이 과도하게 걸린다.
  • 실수 3: 파일명에 공백이 있는데 xargs 기본 모드로 처리해 잘못된 대상이 이동/삭제된다.

검증 방법

# 1) 삭제 전 건수 확인
find /tmp -type f -name "*.tmp" -mtime +14 | wc -l

# 2) 실제 삭제 대신 샘플 20건만 확인
find /tmp -type f -name "*.tmp" -mtime +14 -print | head -20

# 3) 정리 후 파일시스템 여유 공간 확인
df -h /tmp

운영 팁

  • 운영에서는 바로 삭제보다 1차 격리 디렉터리 이동 후 2~3일 뒤 최종 삭제가 안전하다.
  • cron에 넣을 때는 flock으로 중복 실행을 막고, 실행 로그를 남겨 추적 가능하게 만든다.
  • 정리 기준은 팀 규칙으로 문서화해 두는 게 좋다. 예를 들면 로그 30일, tmp 7일, 백업 14일처럼 서비스별 기준을 고정한다.

출처

  • GNU Project
  • Ubuntu Manpage Team
  • Linux man-pages Project