최근 n개의 로그를 제외한 나머지 로그 삭제하기
날짜 별로 로그가 생성될때 최근 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)
head
이전 출력의 앞부분 n 줄을 출력하는 것이 기본동작이지만 음수로 값을 줄경우 마지막 n개를 제외한 나머지를 모두 출력함
xargs
이전 출력을 다음에 온 커맨드의 인자로 넘겨서 실행시킨다.
echo a1 a2 | xargs touch
수행시 실제로는 touch a1
, touch a2
가 수행된다.
주의 사항
ls, head 등은 세부 OS나 버전에 따라 다르게 동작할 수 있으므로 주의 해야 한다.
예) mac의 ls -U
create time 기준 정렬을 한다.
예) mac의 head
는 음수 전달이 안된다.