Bashでバックアップファイルローテーション

任意のディレクトリに毎日バックアップなどのファイルを保存し、一定期間たったらそのファイルを削除するスクリプトが欲しくてBashを書いてみました。

バックアップされるファイルのファイル名はバックアップの日付けがファイル名に含まれているものとします。(YYYYMMDD形式)

[code lang="shell"]

DIRECTORY="/tmp" # バックアップを保存するディレクトリ

FILENAME="*.*"        # 拡張子によらず、すべてのファイルを指定

INTERVAL=2                  # ファイルを消す日数を指定(この例では2日前に作られたファイルを消す)

today_s=`date +%s`     #現在時刻のUNIXタイムを取得

obsoleted_sec=$(($today_s-(86400*${INTERVAL})))    # 今日のINTERVAL日後のUNIXタイムを取得

obsoleted_day=`date -r $obsoleted_sec "+%Y%m%d"`    # obsoleted_secをYYYYMMDD形式に変換

cd $DIRECTORY

files=$(ls ${FILENAME})    # DIRECTORY内のFILENAMEにマッチするファイル名のファイルがあればfiles変数に格納

if [ $? != 0]; then

echo "Files Not FOUND"

exit 1;

fi

for file in ${files}    # 変数filesに含まれるファイル名をfileに代入

do

if [ `echo ${file} | grep ${obsoleted_day}` ]; then    # 変数fileに代入されたファイル名に変数obsoleted_dayの文字列を含むかどうかを判別

rm $FILE

fi

done

[/code]

そもそも

  • INTERVALで指定している日数以前のファイルがあったら、
  • アクセス権がなかったら、
  • ファイル名がYYYYMMDDの形式がなかったら、

の例外処理を無視していますが、

確実にそのディレクトリに毎日YYYYMMDDの形式でファイルが作られているならちゃんと動くはずです。