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