Tips集
backer.sh
- 任意のファイルのバックアップを作成するためのコマンド
- バックアップ用のディレクトリを作成し、ファイル名に番号を付けて保存していく最も単純で原始的なバージョン管理方法
- カレントディレクトリに back というディレクトリを作成していれば、その下にバックアップ用のディレクトリおよびバックアップを作成する
- [オプション]
- 引数= ファイル名 選択したファイル用のバックアップ用ディレクトリを作成、ナンバリングしたバックアップファイルを保存。
- [作成意図] 念のためささっとバックアップファイルを作るために作った。無秩序にバックアップファイルを作ると、ちょっとずつ違う名前のバックアップファイルが増えていって困るが、backer.sh を使うととりあえず番号順に保存してくれる。
#!/bin/bash
#$Id: backer.sh,v 1.7 2014-01-03 04:03:42+09 shirai Exp shirai $
backer(){
check_options $@
Ind=1
for file in ${ArgFiles[@]}
do
echo "[${Ind}] $file"
check_BackDir $file
if [ "$check" = 0 ]; then
#counter=(`ls $BackDir | grep "_" | wc -w`)
counter=(`ls $BackDir | grep "_" | wc -l`)
BackFile="${counter}_${FileName}"
DiffFile=""
while true
do
if [ -f $BackDir/$BackFile ];then
((counter++))
BackFile="${counter}_${FileName}"
else
if [ $counter != 0 ]; then
DiffFile="$((counter-1))_${FileName}"
fi
break
fi
done
if [[ "$DiffFile" != "" ]]; then
DiffCount=(`diff $file $BackDir/$DiffFile | wc`)
else
DiffCount=(1)
fi
if [ $DiffCount != 0 ]; then
cp -vp $file $BackDir/$BackFile
else
echo " Backup has already done."
fi
fi
((Ind++))
done
}
check_options(){
usage_msg="\
Usage: $0 [options] files
Options:
-h show this help
-d dir select TargetDir
-c make backups at current directory
"
TargetDir=""
while getopts hd:c option
do
case "$option" in
h)
echo "$usage_msg"
exit 0
;;
d)
TargetDir="$OPTARG"
if [ -d "$OPTARG" ]; then
echo "TargetDir = $OPTARG"
else
echo "$OPTARG does not exist."
exit 1
fi
;;
c)
TargetDir="."
;;
\?)
echo "Usage: $0 [-h] [-d dir] files" 1>&2
exit 1;;
esac
done
shift `expr "$OPTIND" - 1`
ArgFiles=($@)
if [ ${#ArgFiles} = 0 ];then
echo "$usage_msg"
exit 1
fi
if [ -d "$TargetDir/Back" ]; then
TargetDir="$TargetDir/Back"
elif [ -d "$TargetDir/back" ]; then
TargetDir="$TargetDir/back"
elif [ -d "$TargetDir/BACK" ]; then
TargetDir="$TargetDir/BACK"
else
TargetDir="$TargetDir"
fi
}
check_BackDir(){
file="$1"
if [ ! -f "$file" ];then
echo "$file does not exist"
check=1
return
fi
slash_count=`echo $file | grep -c "/"`
if [[ $slash_count != 0 ]]; then
FileDir="${file%/*}"
else
FileDir="."
fi
FileName="${file##*/}"
BackDirName="${FileName}.dir"
if [ "$TargetDir" = "" ];then
if [ -d "$FileDir/Back" ]; then
BackDir="$FileDir/Back/$BackDirName"
elif [ -d "$FileDir/back" ]; then
BackDir="$FileDir/back/$BackDirName"
elif [ -d "$FileDir/BACK" ]; then
BackDir="$FileDir/BACK/$BackDirName"
else
BackDir="$FileDir/$BackDirName"
fi
else
BackDir="$TargetDir/$BackDirName"
fi
mkdir_idne $BackDir
check=0
}
mkdir_idne(){
if [ ! -d $1 ]; then
mkdir $1
echo "---> $1 was created."
fi
}
backer $@