250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- RDBMS
- sql자격증
- 클라우데라자격증
- CCAAdministrator
- SQL
- SQLD
- 빅데이터실무자격증
- Identity and access management
- CLF-01
- IAM
- EC2
- AWS자격증
- hadoop
- programmers
- 하둡
- 코딩테스트
- MFA
- Multi Factor Authentication
- AWSCloudPractitioner
- 프로그래머스
- 빅데이터
- mysql
- CCA131
- 쉘스크립트
- 파이썬
- 클라우드자격증
- 클라우드컴퓨팅
- hive
- 데이터베이스
- 리눅스
Archives
- Today
- Total
Sherry IT Blog
[Shell Script] 쉘스크립트 파일보관주기 경과 삭제 프로그램 함수 본문
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
반응형
'Linux' 카테고리의 다른 글
[리눅스] 터미널,파일,vi 편집기 글씨 색상 설정 (0) | 2021.11.19 |
---|---|
[리눅스] 사용자 계정, 그룹 보기 명령어 (0) | 2021.11.11 |
[리눅스] su, sudo 권한 명령어 개념 (0) | 2021.11.09 |
[리눅스] 파일 퍼미션 그룹 변경 명령어 (0) | 2021.11.09 |
[리눅스] 절대경로 상대경로 개념 간단정리 (0) | 2021.11.09 |
Comments