prunef というファイルを間引くためのプログラムが便利そうだったのでメモ。
例えばデータベースのバックアップや、ファイルシステムのスナップショット日次で行っていると、当然のことながら毎日1つずつファイルやスナップショットが増えていきます。ただ、実際の復旧となると、直近のファイルやスナップショット以外が必要になることはそれほど多くありません。そんなわけで、過去1ヶ月分は週次、それ以上前の分は月次のように、適度にバックアップを間引いて容量を節約したいと思うことがあります。
そんな時に使えそうなのがこのprunef というプログラムです。
~apreiml/prunef - sourcehut git
Takes an unsorted list of backup names and returns a list of backups for deletion. The backup rotation rules are given via command line args. The backup names need to contain the time and a date(1) like format specifier is required to parse those.
† インストール
言語は Go なので、CentOS の場合は golang と scdoc のパッケージをインストールしておきます。
あとはリポジトリを clone して make install するだけで簡単にインストールできます。
sudo yum install -y golang scdocgit clone https://git.sr.ht/~apreiml/cd prunefmake && make install
† 実際の使い方の例
実際の使い方のイメージがわかりやすいように、YYYY-MM-DD.txt というファイルを1日ごとに作るスクリプトを書いてみました。
これを実行すると今日の分から、1000日分のファイルができます。
mkdir logsseq 0 1000 | while read N ; do touch -d "`date -d "-$N day"`" "./logs/`date -d "-$N day" +%Y-%m-%d`.txt"done
実際にファイルを間引くスクリプトはこんな感じになるでしょうか。
find tmp -name '*.txt' | prunef --keep-daily 7 --keep-weekly 4 --keep-monthly 6 "tmp/%Y-%m-%d.txt" | xargs --no-run-if-empty rm
実行後にフォルダを確認するとこのような感じでファイルが間引かれている(日次が7つ、週次が4つ、月次が6つ)になっていることが分かります。
$ ls -l tmp/-rw-rw-r-- 1 user user 0 Sep 1 2019 2019-09-01.txt-rw-rw-r-- 1 user user 0 Oct 1 20:23 2019-10-01.txt-rw-rw-r-- 1 user user 0 Nov 1 20:23 2019-11-01.txt-rw-rw-r-- 1 user user 0 Dec 1 20:23 2019-12-01.txt-rw-rw-r-- 1 user user 0 Jan 1 20:23 2020-01-01.txt-rw-rw-r-- 1 user user 0 Feb 1 20:23 2020-02-01.txt-rw-rw-r-- 1 user user 0 Feb 9 20:23 2020-02-09.txt-rw-rw-r-- 1 user user 0 Feb 16 20:23 2020-02-16.txt-rw-rw-r-- 1 user user 0 Feb 23 20:23 2020-02-23.txt-rw-rw-r-- 1 user user 0 Mar 1 20:23 2020-03-01.txt-rw-rw-r-- 1 user user 0 Mar 2 20:23 2020-03-02.txt-rw-rw-r-- 1 user user 0 Mar 3 20:23 2020-03-03.txt-rw-rw-r-- 1 user user 0 Mar 4 20:23 2020-03-04.txt-rw-rw-r-- 1 user user 0 Mar 5 20:23 2020-03-05.txt-rw-rw-r-- 1 user user 0 Mar 6 20:23 2020-03-06.txt-rw-rw-r-- 1 user user 0 Mar 7 20:23 2020-03-07.txt-rw-rw-r-- 1 user user 0 Mar 8 20:23 2020-03-08.txt