#!/bin/sh BAK_ROOT="/backup" BAK_TARGET="/home/tommy/backup" DATE_STR=`date +%u` WEEK=${DATE_STR} function backup_full { # Decide the backup folder # $BAK_ROOT # backup_old # backup # if the backup floder existed if [ -d "$BAK_ROOT/backup_old" ]; then echo "Remove the oldest backup" rm -rf $BAK_ROOT/backup_old fi if [ -d "$BAK_ROOT/backup_week" ]; then mv $BAK_ROOT/backup_week $BAK_ROOT/backup_old fi BAK_DIR="$BAK_ROOT/backup_week" mkdir $BAK_DIR echo "Backup $BAK_TARGET to $BAK_DIR/$BAK_NAME" tar czfv $BAK_DIR/backup_full.tgz $BAK_TARGET } function backup_change { find $BAK_TARGET -mtime -1 \! -type d -print>/tmp/filelist.daily tar czfv $BAK_DIR/backup_$WEEK.tgz -T /tmp/filelist.daily } if [ $WEEK = 7 ]; then backup_full else if [ -e "$BAK_ROOT/backup_week/backup_full.tgz" ]; then n=1 MODE="CHANGE" while [ $n -lt $WEEK ]; do if [ ! -f "$BAK_ROOT/backup_week/$backup_$n.tgz" ]; then MODE="FULL" fi n=`expr $n + 1` done if [ MODE = "FULL" ]; then backup_full n=1 while [ $n -le $WEEK ]; do touch "$BAK_ROOT/backup_week/$backup_$n.tgz" n=`expr $n + 1` done else backup_change fi else if [ ! -d "$BAK_ROOT/backup_week" ]; then mkdir $BAK_ROOT/backup_week fi tar czfv $BAK_ROOT/backup_week/backup_full.tgz $BAK_TARGET n=1 while [ $n -le $WEEK ]; do touch "$BAK_ROOT/backup_week/$backup_$n.tgz" n=`expr $n + 1` done fi fi