Git每日備份腳本,實現以下功能:
①、每日定時將git倉庫中,指定項目同步至本地;
②、同步至備份目錄前,刪除佔用空間較大的.git文件夾,
③、設置備份滾動窗口switch,進行滾動窗口期間數據的備份。
④、倉庫地址動態維護一個文件裏。
git_backup2disk.sh腳本清單:
#!/bin/bash
# No. : 001
# Usage : Git projects backuper. will bakup to disk.
# Date : 2099-12-31
# Author: RiverOfIndividual
# --------------------------------------------------------------------------------------------------------------
#set -x
echo -e "\n------------------- Script run time is $(date '+%Y-%m-%d %H:%M:%S') ----------------------\n"
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
echo --------------------------------------$dir
TODAY=`date '+%Y%m%d'`
ONEMONTH_DAYS_AGO=`date -d '30 days ago' '+%Y%m%d'`
git_proj_path=${dir}/GIT_MYDATA_PROJS
git_projall_package=GIT_MYDATA_PROJS
DELETE_HISTORY_FILE_SWITCH=true
function delete_dotgit_file(){
git_address=$1
local PROJ_NAME=$(echo $git_address | cut -d \/ -f5 | cut -d . -f1)
rm -rf $PROJ_NAME/.git
echo $PROJ_NAME
ls -al $PROJ_NAME
sleep 3
}
if [ ! -d "${git_proj_path}" ]; then
mkdir -p ${git_proj_path}
fi
cd $git_proj_path
for proj in $(cat ${dir}/GIT_PROJS_LIST.txt)
do
git clone $proj
delete_dotgit_file $proj
done
ls -al
cd ..
# Do package,distribute work
zip -rq ${git_proj_path}.${TODAY}.zip ${git_projall_package}
chown -R USER:USERGROUP ${git_proj_path}.${TODAY}.zip
mv ${git_proj_path}.${TODAY}.zip /data/fileserver/Git-Backup-Folder
# Do clean work
rm -rf ${git_proj_path}
if [ x"${DELETE_HISTORY_FILE_SWITCH}" == x"true" ]; then
echo -e "Detected that \$DELETE_HISTORY_FILE_SWITCH = $DELETE_HISTORY_FILE_SWITCH , will delete archive 30 days ago"
rm -rf /data/fileserver/Git-Backup-Folder/${git_projall_package}.${ONEMONTH_DAYS_AGO}.zip
if [ ! -f ${git_projall_package}.${ONEMONTH_DAYS_AGO}.zip ]; then
echo -e "\n------------------- Delete history file ${git_projall_package}.${ONEMONTH_DAYS_AGO}.zip successfully ----------------------\n"
fi
else
echo -e "Detected that \$DELETE_HISTORY_FILE_SWITCH = $DELETE_HISTORY_FILE_SWITCH , do nothing"
fi
echo -e "\n------------------- Script finished run at : $(date '+%Y-%m-%d %H:%M:%S') ----------------------\n"
GIT_PROJS_LIST.txt文件清單:
ssh://[email protected]:13388/projectgroup/myproject01.git
ssh://[email protected]:13388/projectgroup/myproject02.git
ssh://[email protected]:13388/projectgroup/myproject03.git
設置crontab定時調度:
0 1 * * * sh /data/fileserver/Git-Backup-Folder/tools/01.git_backup/git_backup2disk.sh 2>&1 > /data/fileserver/Git-Backup-Folder/tools/01.git_backup/git_backup2disk.sh.out