https://naba-san.hatenablog.com/


Linux ファイルバックアップスクリプト

centossrvさんとかfedorasrvさんとかに転がってるスクリプトを使わせてもらってるんだけど,個人的に使い勝手の悪い部分があったので改悪。
悪あがきをした事の記録として,ヒトバシラー向けに晒しておくことにする。

http://www.naba78.net/backup.txt

以下,上記URLのテキストを引用。

#!/bin/bash

# File Backup Script ver 0.1
# - Distributed by www.naba78.net
# - Original: http://centossrv.com/backup.shtml

# Language
LANG=C

# Configurations
#

# Backup list
# *Notice: Full path
BACKUPLIST=/root/cron_scripts/backuplist.txt
[ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit

# Backup expection list
#BACKUPNOLIST=/root/cron_scripts/backupnolist.txt

# Backup Point Directory
# *Notice: You should make an exclusive directory.
BACKUPDIR=/root/backup
mkdir -p $BACKUPDIR

# Backup archive name / format
TIME_STAMP=$(date '+%Y%m%d-%H%M%S')
FILE_NAME=backup_$TIME_STAMP.tar.bz2

# Archive days
BACKUPGEN=90

# Pass phrase
# *Notice: If you don't set the parameter, backup archiver don't process the encryption.
PASS=''

# Backup log
BACKUPLOG=$BACKUPDIR/backup_$TIME_STAMP.log

#
# Configurations Complete!
#

# Expectional error function
error_exit () {
    rm -f $TMPBACKUPNOLIST
    exit 1
}

# Add the backup point directory to Expection file list
#TMPBACKUPNOLIST=`mktemp`
#[ -s $BACKUPNOLIST ] && cat $BACKUPNOLIST > $TMPBACKUPNOLIST
#echo "$BACKUPDIR/" >> $TMPBACKUPNOLIST

# Change directory
cd $BACKUPDIR

# Create backup log
touch $BACKUPLOG
chmod 444 $BACKUPLOG

# Backup start
echo "`date` backup start" >> $BACKUPLOG
#tar cjvfP $BACKUPDIR/$FILE_NAME -T $BACKUPLIST -X $TMPBACKUPNOLIST >> $BACKUPLOG 2>&1
tar cjvfP $BACKUPDIR/$FILE_NAME -T $BACKUPLIST >> $BACKUPLOG 2>&1
code=$?
if [ $code -ne 0 ]; then
    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
    rm -f $BACKUPDIR/$FILE_NAME
    error_exit
else
    chmod 744 $BACKUPDIR/$FILE_NAME
fi
echo "`date` backup end" >> $BACKUPLOG

# Archive Encryption
if [ ! -z $PASS ]; then
    echo "`date` encrypt start" >> $BACKUPLOG
    mkdir -p $HOME/.gnupg
    echo $PASS|gpg --passphrase-fd 0 --batch -c $BACKUPDIR/$FILE_NAME > /dev/null 2>&1
	code=$?
	if [ $code -ne 0 ]; then
	    cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root
	    rm -f $BACKUPDIR/$FILE_NAME*
	    error_exit
	fi
    rm -f $BACKUPDIR/$FILE_NAME
    echo "`date` encrypt end" >> $BACKUPLOG
fi

# Remove old archives
find $BACKUPDIR -mtime +$BACKUPGEN -exec rm -f '{}' ';'

# Delete the Expection file list
#rm -f $TMPBACKUPNOLIST