ShellScript
Linux

バックアップを世代管理

概要

バックアップデータを世代管理するスクリプトです。
サーバの引っ越しとかでよく無くなるので、メモがわりに投稿。

使い方

下記のシェルスクリプトをcronで朝4時とかにセットする想定。
(もし流用するのであれば勿論少し設定が必要です)

#!/bin/bash

PATH=/usr/local/sbin:/usr/bin:/bin

# バックアップ先
BACKUP_DIR=/path/to/backup/dir/

# バックアップ対象
TARGET_DIR=/path/to/dir/
TARGET_FILES=(file1 file2 file3)

# 今日の日付を取得する
DATE=`/bin/date '+%Y%m%d'`

# 削除する日付を取得する(この場合は10日前)
DELETE_DATE=`/bin/date -d '10 day ago' +%Y%m%d`

# バックアップ対象のディレクトリへ移動
cd ${TARGET_DIR}

# バックアップ
for TARGET_FILE in ${TARGET_FILES[@]}; do
    # バックアップ対象ファイルを圧縮して保存
    tar zcf "${BACKUP_DIR}${TARGET_FILE}_${DATE}.tar.gz" ${TARGET_FILE}

    # 過去のバックアップを削除
    if [ -f "${BACKUP_DIR}${TARGET_FILE}_${DELETE_DATE}.tar.gz" ]; then
        rm -rf ${BACKUP_DIR}${TARGET_FILE}_${DELETE_DATE}.tar.gz
    fi
done

定期的にバックアップ

深夜4時とかにcronをしかけておきます。

0 4 * * * sh /path/to/backup/dir/backup.sh > /dev/null 2>&1