Sherry IT Blog

[Shell Script] 쉘스크립트 파일보관주기 경과 삭제 프로그램 함수 본문

Linux

[Shell Script] 쉘스크립트 파일보관주기 경과 삭제 프로그램 함수

sherrylover 2021. 11. 10. 00:13
728x90
반응형

그동안 사용자 그룹이 달라서 자체적으로 삭제를 못하다가 배치실행계정으로 삭제할수 있게 되서 자동화 프로그램을 만들어봤다.

플랫폼 서버내에 주기적으로 쌓이는 파일을 한꺼번에 정리하기 위해 만든 함수

 

공통으로 사용되는 shell.properties 파일에 함수 삽입

function file_drop(){

$1 : file_dir
$2 : file_name
$3 : 확장자(.txt / .dat /.csv)
$4 : 삭제기준 날짜변수(YYYYMM or YYYYMMDD)

	#입력파라메터체크
    if [ -z "$*" ];then #$*는 모든 파라메터
    	echo "file drop function 파라메터 미입력"  && eixt 9
    else
    	echo "input argument : ["$1"] | ["$2"] | ["$3"] | ["$4"]"
    fi

	
    #삭제기준 날짜변수 자릿수 체크
	DEL_DATE=$4
    
    if [ ${#DEL_DATE} -eq 6 ];then
    	num=-6
    elif [ ${#DEL_DATE} -eq 8 ];then
    	num=-8
    fi
    
    #파일경로, 파일명, 확장자를 힌트로 파일찾기
    list =`find $1 -type f -name *.$3 | grep $2`
    
    if [ "$list" ]; then
    	for file in $list
        do
            filename=`basename $file`
            
            #파일 확장자 제외한 파일명뽑기
            temp=${filename%%.$3}
            
            #파일명에서 날짜만 뽑기(끝자리부터 슬라이싱)
            check_date=${temp: $num} #-를 붙일때는 한칸 띄어쓰기
            
            #DEL_DATE > check_date 
            if [ ${DEL_DATE} -gt ${check_date} ]; then
            	echo "FILE TO BE DELETED NAME : $1/${filename}"
                
                #DEL_DATE 이전 날짜 파일들 삭제
                rm -f $1/${filename}
            fi
          done
      else
      	echo "FILE MESSAGE : 삭제할 이전날짜의 파일이 없습니다."
      fi
      
}

 

 

 

파일이 한두개가 아니기 때문에, 배치별로 함수를 넣는건 너무 비효율적일 것 같고 리스크가 크기때문에

공통점이 있는 파일(보관주기가 같은 경우)명만 뽑아서 함수를 실행되게 만들었다.

 

새로만든 자동화 쉘프로그램 .sh

source shell.properties

argfunc $1 #$YYYYMMDD로 변환되는 입력값(배치실행 ODATE(YYYYMMDD) 기준)

DEl_DATE=$(date -d $YYYYMMDD -7 days" +%Y%m%d) #파일보관주기 기준일자
FILE_NAME=("BIGDATA_UPLOAD_" "SAMPLE_FILE" "AI_HUB_FILE" "ETC_FILE" "MODEL_FILE")
FILE_EXTEN=TXT

#배열에 넣은 파일명을 순서대로 꺼내서 파일삭제함수 실행
for i in "${FILE_NAME[@]}"
 do
    echo "파일명 : $i"YYYYMMDD."$FILE_EXTEN"
    
    #인자 4개 넣어서 파일삭제함수 실행 
    #FILE_DAY_DIR=/file/day
    file_drop $FILE_DAY_DIR $i $FILE_EXTEN $DEL_DATE 
 done

 

 

시간복잡도 효율성을 생각하면  for문보다는 다른 대안을 찾는게 낫겠다 싶었는데

파일명 순서대로 돌아가는게 커서 일단 for 문으로 돌려봤다

파일명과 파일경로등은 노출하면 보안에 걸리니깐...임의로 지어봄

보관주기 7일기준 파일 삭제로 매주 월요일로 자동화를 걸어놓으니 파일용량이 10프로정도 줄었다

30일기준 파일은 엄청 줄겠구만..!

728x90
반응형
Comments