プログラミング

logrotateを使わないズボラな一週間分バックアップ

2024年6月5日

logrotateを使うほどでもないようなケースでズボラにバックアップしたいとき、単純に日付などをファイルの末尾に割り振ったりするとファイルがたくさんできてしまいます。そこでdate +%uをサフィックスとして使います。%uは週の何日目かを表す値 (1..7)で、1 が月曜日です。

#!/bin/sh

set -ex

SUFFIX=$(date +%u)

cp test.txt test.txt.${SUFFIX}

これをbackup.shなどとして保存して、cronでデイリー実行しておきます。

今日は水曜日なので、実行するとtest.txt.3としてコピーされます。1週間経つと以下のように7世代分バックアップされます。

test.txt.1
test.txt.2
test.txt.3
test.txt.4
test.txt.5
test.txt.6
test.txt.7

この例ではただのテキストファイルをバックアップしていますが、私の場合は小規模なWebアプリケーションのDBバックアップなどで利用しています。

7日分じゃ不安だよ〜という場合は、date +%dにすると日付でバックアップできます。以下のように最大31世代分バックアップされます。

test.txt.01
test.txt.02
test.txt.03
(省略)
test.txt.29
test.txt.30
test.txt.31

月によって月末日がバラバラになってしまうのを許容できるのであれば採用してもいいかもしれません。

-プログラミング