#!/bin/bash #_yyyymmddhhMM.tar.gz 형식의 파일을 run time 기준으로 삭제 한다. # 원래는 find -mdate 로 만들었으나, find -mdate 의 결과가 ls -al 로 테스트 했을때 # 장비별로 다르게 나오는 파악하기 힘든 원인으로 인해 ls, awk 를 이용하여 삭제 하는 것을 만들었음 # # 추후 _yyyymmddhhMM.tar.gz 파일 형식이면 SRC_DIR 만 수정하여 그대로 사용하면 된다. # (실제로는 " _yyyymmddhhMM." 까지만 형식이 같으면 사용 가능하다.) # find mtime 으로 검색이 원하는데로 돌지 않아서, 파일명 매핑으로 변경 한다. #DAY_AGO=7 #/usr/bin/find /data/backup/fsp/src -mtime +$DAY_AGO -exec rm -rf {} \; # 파일을 삭제할 디렉토리 지정 SRC_DIR=/data/backup/fsp/src1 # SRC_DIR 이 존재하는 디렉토리 인지 체크 한다. if [ ! -d ${SRC_DIR} ]; then # cronjob 에서 /dev/null 2>&1 로 redirect 할 것이기 때문에 echo 는 넣어둔다. echo "${SRC_DIR} not exist target directory. terminate shell." exit fi # 파일 삭제할 기준을 설정(파일 이름에서 날짜가 스크립트 run 타임 기준으로 7일 이전) AGO_DAY=`date +%Y%m%d%H%M -d '7 day ago'` # ls를 이용하여 파일명을 가져온다. FILE_LIST=`ls ${SRC_DIR}` # 파일명으로 돌면서 조건 판단한다. for fname_full in ${FILE_LIST}; do # 파일명의 포맷이 aaa_yyyymmddhhMM.tar.gz 로 되어 있기 때문에 "." 으로 분리된 제일 처음을 가져온다 fname=`echo $fname_full | /bin/awk -F"." '{print $1}'` # 가져온 제일 처음 값에서 "_" 으로 분리된 날짜값을 가져온다. cdate=`echo $fname | /bin/awk -F"_" '{print $2}'` # 가져온 날짜값이 존재하는지 체크 한다. if [ "X"${cdate} != "X" ]; then # 가져온 날짜 값이 기준 시간 이전이면 if [ $cdate -le $AGO_DAY ]; then # 삭제 한다. cronjob 에서 /dev/null 2>&1 로 redirect 할 것이기 때문에 echo 는 넣어둔다. echo "/bin/rm -rf ${SRC_DIR}/${fname_full}" /bin/rm -rf ${SRC_DIR}/${fname_full} fi fi done
2013년 12월 18일 수요일
bash shell로 파일 삭제 cronjob
find mdate 를 이용하여 백업 파일 삭제하는 cronjob 을 걸어 두었는데, find mdate 의 결과가 장비마다 이상하게 나오는 원인 파악 불명인 이상한 현상이 보여서, 그냥 ls, awk 를 이용해서 만들었다. find mdate 의 결과가 왜 이상하게 나오는지 정말 궁금하다???
피드 구독하기:
댓글 (Atom)
댓글 없음:
댓글 쓰기