날짜 별로 로그가 생성될때 최근 n개의 로그만 남기고 삭제하는 방법을 정리한다.

커맨드 정리

로그 파일명에 날짜가 들어있는 경우

ls -1로 파일명 정렬을 하고(line by line 출력) head -n -5로 최근 n(5)개를 걸러낸 후 xargs rm로 삭제한다.

# log 파일 포맷 : log.YYYY-MM-DD
$ ls -1 log.* | head -n -5 | xargs rm

로그의 modify 시간 기준으로 삭제

ls 정렬 방식만 ls -rt로 변경하면 된다.

$ ls -rt log.* | head -n -5 | xargs rm

각 커맨드별 상세 동작 분석

ls

기본 정렬이 날짜별이기 때문에 ls -1로 line by line 출력만 적용해 주면 된다.

관련된 ls 옵션

  • 기본 정렬이 파일명 오름차순
  • -1 : line by line으로 결과 출력
  • -t : modify 시간 기준으로 정렬(최신이 먼저 노출)
  • -u : access 시간 기준으로 정렬(최신이 먼저 노출)
  • -U : 정렬하지 않음, directory 적힌 순서대로 노출(linux)
  • -r : 정렬을 반대로 적용(reverse order)

이전 출력의 앞부분 n 줄을 출력하는 것이 기본동작이지만 음수로 값을 줄경우 마지막 n개를 제외한 나머지를 모두 출력함

xargs

이전 출력을 다음에 온 커맨드의 인자로 넘겨서 실행시킨다. echo a1 a2 | xargs touch 수행시 실제로는 touch a1, touch a2가 수행된다.

주의 사항

ls, head 등은 세부 OS나 버전에 따라 다르게 동작할 수 있으므로 주의 해야 한다.

예) mac의 ls -U create time 기준 정렬을 한다. 예) mac의 head는 음수 전달이 안된다.