Skip to content

Instantly share code, notes, and snippets.

@i97506051502
Created August 24, 2012 03:09
Show Gist options
  • Save i97506051502/3445056 to your computer and use it in GitHub Desktop.
Save i97506051502/3445056 to your computer and use it in GitHub Desktop.
backup specified file to under /USER_HOME/backup/ directory.
########################################################################
#
# Script Name:
# backupTool.sh
#
# Project:
# Miscellaneous
#
# Execute User: any user you want
#
# crontab
# No Entry
#
# Description:
# backup specified file to under /USER_HOME/backup/ directory.
# when backup, convert '/' to '__' (double underscore) in backup file full path.
# backup file suffix is '_YYYYMMDDHHMMSS.backup' (e.g. _20120605150200.backup).
#
# Usage:
# ./backupTool.sh BACKUP_FILE_NAME (exists current directory)
# ./backupTool.sh -f BACKUP_FILE_NAME (specify full path)
#
# Advaned Usage:
# in ~/.bashrc
# alias bk='~/backupTool.sh'
#
# Last Update: 2012/06/13
#
# Authored by Go Sato (ZOOM DESIGN)
#
########################################################################
#!/bin/bash
# ======================================================================
# Preparation
# ----------------------------------------------------------------------
# Nothing to do.
# ======================================================================
# ======================================================================
# Environment Variables
# ----------------------------------------------------------------------
BACKUP_TIME=`date '+%Y%m%d%H%M%S'`
CUR_PATH=`pwd`\/
CUR_FILE_NAME=`echo $1`
CONV_CUR_FILE_NAME_PRE="${CUR_PATH}`echo $1`"
CONV_CUR_FILE_NAME=`echo ${CONV_CUR_FILE_NAME_PRE} | sed -e 's/\//__/g'`
BACKUP_CUR_FILE_NAME=${CONV_CUR_FILE_NAME}_${BACKUP_TIME}.backup
BACKUP_CUR_FILE_FULLPATH=~/backup/${CONV_CUR_FILE_NAME}_${BACKUP_TIME}.backup
FULL_FILE_NAME=`echo $2`
CONV_FULL_FILE_NAME=`echo $2 | sed -e 's/\//__/g'`
BACKUP_FILE_NAME=${CONV_FULL_FILE_NAME}_${BACKUP_TIME}.backup
BACKUP_FILE_FULLPATH=~/backup/${CONV_FULL_FILE_NAME}_${BACKUP_TIME}.backup
# -f フルパス指定でカレントディレクトリーにファイルがあったときに使う
FULL_FILE_NAME_2=${CUR_PATH}${FULL_FILE_NAME}
CONV_FULL_FILE_NAME_2=`echo ${FULL_FILE_NAME_2} | sed -e 's/\//__/g'`
BACKUP_FILE_NAME_2=${CONV_FULL_FILE_NAME_2}_${BACKUP_TIME}.backup
BACKUP_FILE_FULLPATH_2=~/backup/${CONV_FULL_FILE_NAME_2}_${BACKUP_TIME}.backup
# ======================================================================
# ======================================================================
# Functions
# ----------------------------------------------------------------------
function echoUsage() {
echo 'backupTool.sh - Usage:'
echo '1)' no option - backup file exists in current directory.
echo './backupTools.sh BACKUP_FILE_NAME ( <- you wanna backup in current directory )'
echo '2)' specify backup file full path.
echo './backupTools.sh -f BACKUP_FILE_FULLPATH ( <- you wanna backup )'
}
function fullPathBackup() {
# カレントディレクトリーに指定された(フルパスでない)ファイルがあるかチェック
ls ${CUR_PATH}${FULL_FILE_NAME} > /dev/null 2>&1
if [ $? -eq 0 ]; then
CUR_DIR=`pwd`/
echo "Do you want to backup ${CUR_DIR}${FULL_FILE_NAME} ? [ y/n ]"
read ANSWER
if [ ${ANSWER} = 'y' ]; then
mv ${FULL_FILE_NAME_2} ${BACKUP_FILE_FULLPATH_2} && cp -p ${BACKUP_FILE_FULLPATH_2} ${FULL_FILE_NAME_2}
if [ $? -ne 0 ]; then
echo 'backup failure.'
exit 1
else
echo 'backup success. - backup file is '${BACKUP_FILE_FULLPATH_2}'.'
echo '........................................................................'
ls -la ${BACKUP_FILE_FULLPATH_2}
echo '........................................................................'
exit 0
fi
elif [ ${ANSWER} = 'n' ]; then
echo 'Please specify full path you want to backup.'
else
echo 'Please type 'y'(means yes) or 'n'(means no) strictly.'
fi
else
if [ -f ${FULL_FILE_NAME} ]; then
if [ $# -ge 3 ]; then
echo 'Error - Too many arguments are supplied.'
echoUsage
exit 1
else
:
fi
else
echo 'Error - Specified file ''"'${FULL_FILE_NAME}'"'' does not exist.'
echoUsage
exit 1
fi
mv ${FULL_FILE_NAME} ${BACKUP_FILE_FULLPATH} && cp -p ${BACKUP_FILE_FULLPATH} ${FULL_FILE_NAME}
if [ $? -ne 0 ]; then
echo 'backup failure.'
exit 1
else
echo 'backup success. - backup file is '${BACKUP_FILE_FULLPATH}'.'
echo '........................................................................'
ls -la ${BACKUP_FILE_FULLPATH}
echo '........................................................................'
exit 0
fi
fi
}
function currentPathBackup() {
ls ${CUR_PATH}${CUR_FILE_NAME} > /dev/null 2>&1
if [ $? -eq 0 ]; then
if [ $# -ge 2 ]; then
echo 'Error - Too many arguments are supplied.'
echoUsage
exit 1
else
:
fi
else
echo 'Error - Specified file ''"'${CUR_PATH}${CUR_FILE_NAME}'"'' does not exist.'
echoUsage
exit 1
fi
mv ${CUR_FILE_NAME} ${BACKUP_CUR_FILE_FULLPATH} && cp -p ${BACKUP_CUR_FILE_FULLPATH} ${CUR_FILE_NAME}
if [ $? -ne 0 ]; then
echo 'backup failure.'
exit 1
else
echo 'backup success. - backup file is '${BACKUP_CUR_FILE_FULLPATH}'.'
echo '........................................................................'
ls -la ${BACKUP_CUR_FILE_FULLPATH}
echo '........................................................................'
exit 0
fi
}
# ======================================================================
# Check arguments
# ----------------------------------------------------------------------
if [ $# -eq 0 ]; then
echoUsage
exit 1
# $1 がファイルではなく、かつ -f ならフルバックアップ
elif [ ! -f $1 ] && [ $1 = '-f' ]; then
file_path=full
# でないなら $1 がファイルとして存在するかチェック
elif [ -f $1 ]; then
file_path=current
# それもないなら異常終了
else
echo 'Error - Specified file ''"'$1'"'' does not exist.'
echoUsage
exit 1
fi
# ======================================================================
# Backup
# ----------------------------------------------------------------------
if [ -d ~/backup ]; then
:
else
mkdir ~/backup
fi
case "$file_path" in
full ) fullPathBackup ;;
current ) currentPathBackup ;;
esac
# ToDo
# ======================================================================
# 1)
# -f なしでフルパスを指定したときのエラーメッセージ内で / が 2 回続くのを防ぐ
# 引数の頭文字が / か否かで分岐するようにする
# 2)
# 引数の始まりが ./ のときに、バックアップファイルのファイル名がおかしくなるのを防ぐ
# bk ./php.ini
# backup success. - backup file is /root/backup/__root__.__php.ini_20120613203111.backup.
# 3)
# man を付ける。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment