Created
August 24, 2012 03:09
-
-
Save i97506051502/3445056 to your computer and use it in GitHub Desktop.
backup specified file to under /USER_HOME/backup/ directory.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
######################################################################## | |
# | |
# 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