cygwin bash backup script bkdays

bash

バックアップ用スクリプト。実行時から指定日数分(-mtime)回収。日数指定なしなら、その週の日数分を、日曜(=0)は例外で対象全部を。危険なので使用にはご注意を。gitでいいんだけどね。無い時の遊び。

$ bkdays . 6
#===========================================================
# period: 2015-02-08 (02:50:14) 2015-02-02
#-----------------------------------------------------------
# target=/home/mu/dl/_test
# backup=/home/mu/workspace/backup/2015-0208-0250-14/src
# readme=/home/mu/workspace/backup/2015-0208-0250-14/readme.txt
# option="-type f -mtime -6"
#-----------------------------------------------------------
# find $target $option | xargs cp -R --parents -t $backup
#===========================================================
target/0
target/k/2

とりあえず、こんな感じでバックアップするスクリプト。中身が相当雑なので覚悟を。鯖越しの補正などはもちろんしていません。

見出し部分のように特殊な仕様なのでご注意ください。

#!/usr/bin/bash
## bash-4.1
bkdays(){
local target=${1:-.}
if [ -d "$target" ]; then
local now=$(date +'%F %T %z')
local fmt=$(date -d "$now" +'%Y-%m%d-%H%M-%S')
local backup=~/workspace/backup/$fmt/src
local period=$(date -d "$now" +'%F (%T)')
local option="-type f"
shift
local n=${1:-$(date -d "$now" +'%w')}
shift
n=${n//[^0-9]/};n=${n#0};[ -n "$n" ]&&{
option+=" -mtime -$n"
period+=" "$(date -d "$now $n days ago" +'%F')
}
local files=$(find $target $option)
[ -z "$files" ]&&{
cat<<EOF
#===========================================================
# period: $period #no-file
#-----------------------------------------------------------
# target=$(cd $target;pwd)
#===========================================================
EOF
return 0
}
mkdir -p $backup
##find $target $option | xargs cp -R --parents -t $backup
cp -R --parents -t $backup $files
local readme=$(cd $backup/..;pwd)/readme.txt
cat<<EOF >$readme
#===========================================================
# period: $period
#-----------------------------------------------------------
# target=$(cd $target;pwd)
# backup=$backup
# readme=$readme
# option="$option"
#-----------------------------------------------------------
# find \$target \$option | xargs cp -R --parents -t \$backup
#===========================================================
$(cd $backup; find . -type f | sed -e 's@^./@@')
EOF
cat $readme
fi
}