Git每日備份腳本

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
發佈了79 篇原創文章 · 獲贊 71 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章