최근 CCTV 데이터가 업로드되는 서버의 파티션이 100%가 되서 일정 기간 동안의 CCTV 기록이 남겨지지 않는
일이 발생했다.
그래서 급히 데이터가 저장되는 파티션의 용량이 일정부분 차면 데이터를 삭제하는 정책으로 스크립트를
작성기로 했는데 한가지 문제가 발생했다.
CCTV가 수십대여서 해당 CCTV 이름으로된 디렉토리마다 조건을 줘서 삭제를 해야했는데 이것이 너무
불편하고 코드가 길어지며 가장 오래된 파일을 비교후 순차적으로 삭제할수가 없었다.
예를들어 이런 문제였다. A 디렉토리 안에 B, C, D 디렉토리가 있다고 하자.
A 디렉토리안에 있는 모든 파일들중 생성된 시간이 가장 오래된 파일리스트가 출력 되기를 원했지만 이것이
쉽지 않았다.
상위 디렉토리 예를 들어 B 디렉토리의 리스트를 먼저 출력하고 그다음 C 디렉토리 그 다음 D 디렉토리를
보여주는 식이여서 모든 파일을 비교후 삭제가 쉽지 않았다.
그래서 생각해낸게 find 명령어로 오래된 파일들을 출력하기로 했다.
여기서 핵심은 시간을 비교할때 timestamp를 사용하여 초단위로 구분하는 것이였다.
초 단위로 구분하는것은 데이터가 최대한 오래된 순서로 삭제 하기 위함이다.
timestamp란 유닉스가 개발된 1970년대를 기준으로 하여 1970년 1월 1일 0시부터 초단위로 계산된 정수를
말하며 예를들어 1970년 1월 1일 0시는 0이고 2015년 8월 25일 14시 45분은 1440481500이 된다.
perl이 설치된곳에서 perl -e ‘print scalar localtime(timestamp값),”\n”‘ 명령어로 “Tue Aug 25 14:45:00 2015”
요렇게 보기 쉽게 시간이 변환되어 나온다.
find 명령은 find -printf ‘%Ts\n’ 옵션을 줘야 timestamp 값이 출력된다.
해당 스크립트를 crontap에 일정 주기로 실행되게 설정후 문제가 없어졌다.