svn-backup-dumps.pyだけで物足りないところをPerlで補完
Twitter / Kota Sakoda: svn-backup-dumps.py -c 10とか…
開発サーバーのバックアップとかやってて、ふと思った事がきっかけです。
svn-backup-dumps.py ってなかなか便利で、
リビジョンを10個毎まとめてダンプ。
$ svn-backup-dumps.py -c 10 /YOUR/repository . repository.000000-000009.svndmp repository.000010-000019.svndmp ...
リビジョンを50個毎まとめてダンプ。
$ svn-backup-dumps.py -c 50 repository.000000-000049.svndmp repository.000050-000099.svndmp ...
みたいにお手軽にバックアップ出来るわけです。
cronに登録しておくと、とても便利なんです。
勝手に最新リビジョンまでバックアップしてくれるわけですが、ここで一つ問題があります。
仮に最新リビジョンが105だった場合、-c 10オプションを指定すると、
repository.00090-000099.svndmp repository.00100-000105.svndmp
とダンプしてくれるのはいいのだけど、その後リビジョンが106になり、そのタイミングでcronが走ってしまったりすると、
repository.00100-000106.svndmp
とファイルが生成されてしまい、
repository.00100-000105.svndmp
このファイルはもろにゴミになってしまうというわけ。
このゴミファイルを勝手に消してくれる機能はさすがについていないようでちょっと残念。
というわけで、上記のようなゴミファイルを消す処理を書きました。
Pythonはすらすら書けないのでPerlで。
delete-old-dumps.pl
use strict;
my $dir = shift || ".";
my %data;
opendir DIR, $dir or die($!);
while (my $file = readdir(DIR) ){
next if $file =~ /^(\.|delete-old-dumps)/;
push @{$data{(split /\.|-/, $file)[1]}}, $file;
}
closedir DIR;
foreach (sort keys %data){
my @cache = reverse sort @{ $data{$_} };
if (scalar @cache > 1){
for (my $i=1; $i < scalar @cache; $i++){
unlink $dir . '/' . $cache[$i] or warn($!);
}
}
}
使い方は、
$ delete-old-dumps.pl YOUR_DUMPS_PATH
これで綺麗にする事ができますた。



