[리눅스/윈도] 스프링 기반 프로젝트 - 부분 백업 스크립트

2023. 4. 5. 02:20리눅스 실제 사용 팁/bash

큰 사이트의 프로젝트에 참여할 때 본인이 작업한 소스만 백업하고 싶을 때 쓰면 유용하다.

본 스크립트는 넥사크로 프로젝트를 기준으로 작성하였다.

 

윈도10에는 WSL 이 있는데 보안규정에 위배될까봐 삭제했다가 BASH 와 GNU 유틸리티가 너무 그리운 나머지 거들떠 보지도 않던 Cygwin 을 설치하게 되었다.

 

#!/usr/bin/bash
# Copyright [2021-2022] [한정훈 & papercraft.tistory.com & 종이와 쉼터]
# 
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#    http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ------------------------------------------------------------
# 본 BASH 스크립트는 아파치 라이선스 버전 2.0(라이선스)에 따라 라이선스가 부여됩니다.
# 라이선스를 준수하지 않는 한 이 파일을 사용할 수 없습니다.
# 다음에서 라이선스 사본을 얻을 수 있습니다.
# 
#  http://www.apache.org/licenses/LICENSE-2.0
# 
# 관련 법률에서 요구하거나 서면으로 동의하지 않는 한 소프트웨어
# 라이선스에 따라 배포되는 것은 "있는 그대로" 배포되며,
# 명시적이든 묵시적이든 어떠한 종류의 보증이나 조건도 제공하지 않습니다.
# 라이선스에 따른 권한 및 제한 사항을 관리하는 특정 언어는 라이선스를 참조하십시오. 
# 
# 퍼갈 때는 출처를 남겨주세요.

function usage {
	echo -e '\n'
	echo 사용방법은 다음과 같습니다.
	echo \#--------------------------------------\#
	echo `basename $0` [work-name] [screen-name]
	echo -e '  [work-name] \t\tmember'
	echo -e '  [screen-name] \t\tInfo01'
}

echo \#--------------------------------------\#
echo 웹개발소스 백업 스크립트입니다.

[[ $# -lt 2 ]] && usage && exit 0
echo \#--------------------------------------\#


ROOT_LOC=${HOME}/workspace/MyPrj/src/main
JAVA=${ROOT_LOC}/java
MAPPER=${ROOT_LOC}/resources/mybatis/mappers

l_work=${$1^h}	# 알파벳 소문자로 변환함
work=${l_work^}	# 첫 글자만 대문자로 변환함

l_screen=${$2^h}	# 알파벳 소문자로 변환함
screen=${l_screen^}	# 첫 글자만 대문자로 변환함

workScreen=${work}${screen}

xfdl=${ROOT_LOC}/wasapp/${l_work}
svc=${JAVA}/${l_work}/service
impl=${JAVA}/${l_work}/service/impl
dao=${JAVA}/${l_work}/service/dao
vo=${JAVA}/${l_work}/vo
web=${JAVA}/${l_work}/web
mapper=${MAPPER}/${l_work}


backup_target=''

if [ -d ${xfdl} ];then
	backup_target+=${xfdl}/${workScreen}'*.xfdl '
	backup_target+=${xfdl}/${workScreen}'*.xfdl.js '
fi

if [ -d ${svc} ];then
	backup_target+=${svc}/${workScreen}'*.java '
fi

if [ -d ${impl} ];then
	backup_target+=${impl}/${workScreen}'*.java'
fi

if [ -d ${dao} ];then
	backup_target+=${dao}/${workScreen}'*.java'
fi

if [ -d ${vo} ];then
	backup_target+=${vo}/${workScreen}'*.java'
fi

if [ -d ${web} ];then
	backup_target+=${web}/${workScreen}'*.java'
fi

if [ -d ${mapper} ];then
	backup_target+=${mapper}/${l_work}_${workScreen}'*_sql.xml'
fi


OUTPUT_DT=$(date +'%Y-%m%d_%H%M%S')
OUTPUT_DIR=${HOME}/ProjectBackup
TEMP_DIR=${HOME}/temp
TEMP_OUT_DIR=${TEMP_DIR}/${OUTPUT_DT}


if [ ! -d ${TEMP_OUT_DIR} ];then
	mkdir -p ${TEMP_OUT_DIR};
fi

cp ${backup_target} ${TEMP_OUT_DIR}/
cd ${TEMP_OUT_DIR}

zip ${OUTPUT_DIR}/${OUTPUT_DT}_MyPrj-${work}_${screen}.zip *