cygwin bash backup script bkdays
_muili.
バックアップ用スクリプト。実行時から指定日数分(-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 }