리눅스 명령어로 최근 파일만 남기고 지우기

서버를 관리하다 보면 주기적으로 로그를 남기거나 백업 등을 하게 되는데 시간이 지날수록 관련 파일이 쌓이게 된다. 보통 이럴때 find 명령으로 오래된 날짜의 파일을 찾아서 지우는 방법이 있다. 하지만 이 방법은 날짜를 기준으로 하다보니 예상치 못한 이유로 새로운 파일이 생성되지 않으면 결국에는 모든 파일이 지워진다. 우리는 언제나 일정한 개수의 최신 파일이 유지되기를 바란다.

그래서 원하는 개수만큼의 최근 파일만 남기는 간단한 리눅스 명령어 예제를 만들어봤다.

$ mkdir ./test
$ cd ./test
$ touch 1.log && sleep 1 && touch 2.log && sleep 1 && touch 3.log
$ ls -ltd
$ ls -td1 *.log | tail -n +3 | xargs rm -f
$ ls -ltd

위 예제에 대한 설명은 아래와 같다.

3개의 파일을 1초 간격으로 만든다.

$ touch 1.log && sleep 1 && touch 2.log && sleep 1 && touch 3.log

ls 명령으로 파일 목록을 시간 내림차순으로 출력한다.

$ ls -td1 *.log

tail 명령으로 파일 목록의 3번째 라인부터 출력한다.

… | tail -n +3

출력되는 3번째부터 파일부터 rm 명령으로 삭제하면 최근 날짜의 파일 2개만 남는다.

… | xargs rm -f

이렇듯 단순히 명령을 조합하여 필요한 기능을 만들 수 있다는 것이 리눅스의 강점이다.

2 thoughts on “리눅스 명령어로 최근 파일만 남기고 지우기

  1. 김민수

    해봤는데 안되네요
    rm: invalid option — ‘w’ 이란 메시지가뜨네요

    응답
    1. OhMook

      반드시 ls -td1 으로 해야 하네요..
      파일명 만 나오도록 한후 rm..

      응답

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다