오래된 (특정 기간 이상 된) 파일 찾아서 지우기 How to find old (aged more than specific days) files and remove

특정 기간 이상 지난 파일 삭제 하기

운영계는 보통 로그 보관 정책이 있고, 압축/백업 등이 자동화 되어 있으므로 특별히 신경 쓸 일이 없지만
가끔 개발계나 검증계에서 디스크가 부족하여 로그파일등을 한꺼번에 지워야 하는 경우가 있습니다.
매번 검색해서 지우곤 하는데 이것저것 해 보고 가장 편했던 방식을 기록용으로 적어 놓는 포스트 입니다.

TL;DR

현재 디렉토리에서 14일이 지난 파일을 일괄 삭제 하는 명령어

1
find ./ -mtime +14 -type f | xargs rm

ctime, mtime, atime

리눅스에서 파일과 관련된 시간은 ctime mtime atime 이 있습니다.

  • ctime: 마지막 변경 시간 (inode 관련 변경이 일어난 경우)
  • mtime: 마지막으로 파일 내용이 변경된 시간
  • atime: 마지막으로 접근된 시간 (read 포함)

특정 기간 이상 지난 파일들 찾아내기

find 명령어와 mtime 을 이용하면 원하는 폴더내에 특정 기간 이상 지난 파일들을 찾아낼수 있습니다.

1
find /nakjunizm/mylogfile-path/ -mtime +7

/nakjunizm/mylogfile-path/ 안에 있는 7일 지난 파일들을 찾아내는 예 입니다.

찾아낸 파일 삭제하기

찾아낸 파일을 삭제하기 위해서는 여러 방법이 있겠지만 가장 간단하게 사용 할 수 있는 xargs 를 이용해서 지워보겠습니다.

1
find /nakjunizm/mylogfile-path/ -mtime +7 | xargs rm

이렇게 하면 파일/디렉토리 구분없이 find에 걸리게 됩니다. 어짜피 삭제를 rm 으로 했기 때문에 디렉토리는 삭제되지 않습니다만
더 깔끔하게 아래와 같이 삭제 해 보겠습니다.

1
find /nakjunizm/mylogfile-path/ -mtimt +7 -type f | xargs rm

그런데 이제 저는 log 로 끝나는 파일만 삭제 하고 싶어 졌습니다.

1
find /nakjunizm/mylogfile-path/ -mtime +7 -type f -name "*.log" | xargs rm

이런식으로 find 와 mtime을 적절히 조합하면 원하는 파일을 일괄적으로 삭제 가능 합니다.

Share