Skip to content

Instantly share code, notes, and snippets.

@mkakh
Forked from nobucshirai/backer.sh
Created October 6, 2018 08:41
Show Gist options
  • Save mkakh/45bd0210f071c46bb6685bbdb5936915 to your computer and use it in GitHub Desktop.
Save mkakh/45bd0210f071c46bb6685bbdb5936915 to your computer and use it in GitHub Desktop.
A simple backup script.
#!/bin/bash
# AUTHOR
# 2013/10/08 Nobu C. Shirai
# 2018/10/06 Akira Hasegawa
backer(){
check_options $@
Ind=1
for TargetFile in ${ArgFiles[@]}
do
echo "[${Ind}] $TargetFile"
if [ ! -f "$TargetFile" ]; then
echo "$TargetFile does not exist"
break
fi
setBackDir "$TargetFile"
# Set NewBackFile and OldBackFile
prefix_no="$(( $( find "${BackDir}" -regex ".*/[0-9][0-9]*_${FileName}" | wc -l ) ))"
NewBackFile="${prefix_no}_${FileName}"
OldBackFile=""
if [ $prefix_no != 0 ]; then
OldBackFile="$(( prefix_no - 1 ))_${FileName}"
fi
# Backup TargetFile as $BackDir/$NewBackFile
diff -q "$TargetFile" "$BackDir/$OldBackFile" 1>/dev/null 2>&1
if [[ $? != 0 ]]; then
cp -vp "$TargetFile" "$BackDir/$NewBackFile"
else
echo " This file had already backuped. ($OldBackFile)"
fi
((Ind++))
done
}
check_options(){
usage_msg="\
Usage: $0 [options] files
Options:
-h show this help
-d dir select PATH to backup (default is current directory)
-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
}
setBackDir(){
file="$1"
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
}
mkdir_idne(){
if [ ! -d $1 ]; then
mkdir $1
echo "---> $1 was created."
fi
}
backer $@
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment