tarで7世代バックアップをするperlスクリプト
UNIX系のOSを使っているとバックアップによく使うコマンドとしTARが有ります。よく「TAR(ター)で固める」言います。固めたものをターボールとか言います。
tar <operation> [option]
という指定になります。
大抵tarで固める場合に使うお決まりの書き方は
tar –zcvf ターボール名.tar.gz 固めるディレクトリ名 で
といった感じです。
逆に解凍(展開)する場合は
となります。
オペレーションの大体の意味は
-z gzipで圧縮
-c tarボールの作成
-x 解凍(展開)
-v 状況を表示
-f ファイル名の指定
となります。詳しくはmanコマンドなどを参照してください。
あと、除外したいファイルやディレクトリ(フォルダ)を指定したい場合は-Xオプションで除外リストファイルを指定するか–excludeオプションで個々のファイルやディレクトリを指定します。ここでは “-X”オプションについては解説しません。「–exclude」については軽く解説します。
–exclude PATTERN
というフォーマットで正規表現やワイルドカードで指定することができます。
–exclude aaa.txt –-exclude bbb.txt –exclude ccc.dir
という風に複数のオプションを付ければ複数のファイルやディレクトリを除外することができます。
で、それを踏まえて、昔書いたLinux用のtarで7世代バックアップを取るperlのスクリプトです。ブログに載せるにあたってちょっと修正しました。
cronで動かして毎日サーバのバックアップを取るのに使ってます。
backup関数に作成ターボール名,ターゲットディレクトリのパス,除外したいファイルやディレクトリがある場合はそのリストを指定すれば除外されるようになています。適当にbackup関数を増やしたり削除やコメントアウトすることでバックアップするディレクトリを指定することができます。
●backup.pl
#!/usr/local/bin/perl
#
# 7世代バックアップバッチ
#
# 2004.04.30
# 2010.06.15 update
# program by kumacchi
#
$ENV{TZ}="JST-9"; #タイムゾーン設定(日本)
my $namespace = ‘www2’; #namespace
my $ddir = "/home2"; #バックアップ先
&backup(‘home’, ‘/home’,(‘htdocs/bbs’,’htdocs/cnt’,’htdocs/blog’));
&backup(‘mail’, ‘/var/mail’);
&backup(‘log’, ‘/var/log’);
&backup(‘named’,’/var/named’);
&backup(‘etc’, ‘/etc’);
&backup(‘root’, ‘/root’);
&backup(‘bbs’, ‘htdocs/bbs’);
&backup(‘cnt’, ‘htdocs/cnt’);
&backup(‘blog’, ‘htdocs/blog’);
exit(0);
#———————————————————-
# 曜日の数を求める(日0-土曜6)
#———————————————————-
sub wDay{
(localtime(time))[6];
}
#———————————————————-
# バックアップ処理
# &backup(name,dir,(exclude));
#例 &backup(‘home’,’/home’);
#———————————————————-
sub backup{
my($name,$dir,@opt) = @_;
my $wday = &wDay();
my $fname = "$ddir/$namespace.$name.$wday.tar.gz"; #ファイル名(ディレクトリ含む)
system("tar -zcf $fname $dir @opt"); #バックアップ実行
print "tar -zcvf $fname $dir @opt\n"
}