#!/bin/bash # simple backup script for everyday cron execution # after execution `crontab -e` add new line to crontab schedule: # @daily sh /home/user/backup.sh # dir for archives: SAVEDIR=/home/user/archive/ # files and dirs for backup: backups[0]=/home/user/some.file backups[1]=/home/user/somedir # mysql databases for backup: db[0]=databasename1 db[1]=databasename2 # number of days for backup DAYS=5 WEEKS=10 # create db backups for n in ${!db[@]}; do dbbackups[n]=${SAVEDIR}${db[n]}.gz mysqldump ${db[n]} > ${dbbackups[n]::-3} gzip ${dbbackups[n]::-3} done # create archive with file name 'arc.tar.gz' tar -cvzf ${SAVEDIR}arc.tar.gz ${backups[*]} ${dbbackups[*]} # remove db backups rm ${dbbackups[*]} # save last WEEKS if [ -e ${SAVEDIR}arc-w1.tar.gz ] then oneweek=${SAVEDIR}arc-w1.tar.gz oneweekripen=`find ${SAVEDIR}arc-w1.tar.gz -type f -mtime +10` echo $oneweek echo $oneweekripen if [ "$oneweek" = "$oneweekripen" ] then for ((a=WEEKS; a >= 2 ; a--)) do let b=a-1 mv ${SAVEDIR}arc-w${b}.tar.gz ${SAVEDIR}arc-w${a}.tar.gz done mv ${SAVEDIR}arc-d5.tar.gz ${SAVEDIR}arc-w1.tar.gz fi else mv ${SAVEDIR}arc-d5.tar.gz ${SAVEDIR}arc-w1.tar.gz fi # save last DAYS for ((a=DAYS; a >= 2 ; a--)) do let b=a-1 mv ${SAVEDIR}arc-d${b}.tar.gz ${SAVEDIR}arc-d${a}.tar.gz done mv ${SAVEDIR}arc.tar.gz ${SAVEDIR}arc-d1.tar.gz exit 0