名前¶
File::Backup - 簡単なファイルのバックアップ & ローテーションの自動化
概要¶
use File::Backup;
backup(
from => '/source/path/to/backup/from',
to => '/destination/path/to/backup/to',
keep => 5,
timeformat => 'YYMMDD_hhmmss',
);
説明¶
このモジュールは自動的に元のファイルをロックをおこなう、 記録と圧縮(いわゆる"バックアップ")計画を実装します。
* 現在のところ、これはUnixパス文字列でのtarとgzipだけです。おそらく あなたのコンピュータでは、これで大丈夫でしょう...。クロス・プラットフォームの ファイルのバックアップはもうすぐ実装される予定です。
この新しいバージョンでの、本当に素晴らしい特徴は、tarとgzipの あなたのローカルなバージョンを見つけるためにFile::Which
を利用することです。 さらにLockFile::Simple
流の自動的なファイルロックが実装されています。
とてもスゴいことの1つは、任意のタイムスタンプ・フォーマット文字列を 持ったbackup
関数を与えることができるということです。
またtarに圧縮を適用するかどうかを指定することもできます。
これらのオプションの全ては下記のbackup
関数のドキュメントのセクションで 詳しく説明されています。
エクスポートされる関数¶
- backup %ARGUMENTS
-
$backed_files = backup(%arguments);
もっとも単純な形式では、この関数は入力を元ディレクトリ、出力先 ディレクトリとして受け取り、元ディレクトリのファイルの圧縮された アーカイブファイルを出力先ディレクトリに入れます。
元のパスをキーに、アーカイブファイルの名前を値にもつハッシュの リファレンスを返します。
* バックアップされたファイルのリストが実装されたあかつきには(
TO DO
を参照)、 これらのファイルがキーに、バックアップされた新しく、タイムスタンプが つけられたパス名が値となるでしょう。この関数の引数を以下に示します。
debug => 0 | 1
冗長な処理を有効にします。デフォルトは0(オフ)です。
from => $PATH
バックアップするファイルの元ディレクトリ。与えられなければ、現在の ディレクトリが使われます。
to => $PATH
アーカイブが置かれるオプションの出力先ディレクトリ。もし与えられなければ 現在のディレクトリが使われます。
keep => $NUMBER
ディレクトリに保存するバックアップの最大数。
これを正の数を
n
に設定することにより、n
個の最も新しい バックアップが保存されるようになります。これを負の数に設定すると すべてのバックアップを保存するようになります。デフォルトでは マジカルな数である7(一週間分のバックアップ)に設定されます。timeformat => $STRING
バックアップファイルに付けられるときに使われる日付時刻の形式文字列。
このパラメータは、タイムスタンプをなくすために何も指定しなかったり、
time
をスタンプとして使うために'epoch'という単語としたり、 順に以下の組み合わせが入っている文字列にしたりといったことができます:Y => 年 M => 月 D => 日 h => 時 m => 分 s => 秒
いくつかの例を示しましょう:
'YYYY-MM-DD_hh-mm-ss' は
sprintf
による'%4d-%02d-%02d_%02d-%02d-%02d'の ように見えます。2003年1月2日 午前3時4分5秒は'2003-01-02_03-04-05'に なります。後ろの書式文字を省くこともできます。'YYYYMMDD'は'%04d%02d%02d'になり '20030102'を作成します。
このモジュールは年については常に4桁を使うことに注意してください。 そのため'Y-MMDD'は'2003-0102'を作成します。
この"逆順の日付"体系はバックアップファイルを厳密に日付順に並び替える ために使われます。つまりスタンプは時間の単位が最も大きいものの順で なければなりません。もちろんあいまいなスタンプを作ることもできます。 'YMDhms'は'200312345'を作成します。これが2003年の12月3日でしょうか? だれかわかりますか?
archive => 0 | 1
バックアップファイルをアーカイブするためのフラグ。デフォルトは1。
* これはまだ有効ではありません。しかし将来のバージョンではファイルは 一まとめにアーカイブされることなく、スタンプがつけられバックアップ・ ディレクトリにコピーすることができるようになります。
archiver => $PATH_TO_PROGRAM
アーカイブするプログラム。デフォルトはあなたのローカルなtar。
archive_flags => $COMMAND_SWITCHES
オプションのアーカイブのスィッチ。デフォルトは
'-cf'
。prefix => $STRING
オプションで、(タイムスタンプ文字列の前に)アーカイブファイル名の 先頭として頭に付けられる文字列。
これは複数の異なるもののバックアップを同じディレクトリに保存する とき便利です。
suffix => $STRING
オプションで、しかし重要なアーカイブの拡張子。デフォルトは
'.tar'
です。compressor => $PATH_TO_PROGRAM
圧縮するプログラム。デフォルトはあなたのローカルなgzip。
compress_flags => $COMMAND_SWITCHES
オプションで圧縮でのスィッチ。デフォルトはオフ(つまり何も設定 しません)。
compress => 0 | 1
アーカイブ圧縮をオフやオンにするフラグ。
* 現在は、これは
archive
フラグがオンのときにだけ意味があります。files => \@FILENAMES
オプションでバックアップするファイルのリスト。
XXX まだ実装されていません
include => $REGEXP
オプションで中にいれるファイル名にマッチする正規表現。
XXX まだ実装されていません
exclude => $REGEXP
オプションで除外するファイル名にマッチする正規表現。
XXX まだ実装されていません
flatten => 0 | 1
元のディレクトリのツリー構造を保存するかどうかのフラグ。デフォルト では0に設定します。
XXX まだ実装されていません
unique_names => 0 | 1
元のファイルがアーカイブのなかでユニークな名前を持つことを強制するフラグ。 デフォルトは0。
XXX まだ実装されていません
以下の以前からのパラメータも有効です。しかし今では対応するパラメータの 別名となっています:
tar => archiver tarflags => archive_flags torootname => prefix tarsuffix => suffix compress => compressor compressflags => compress_flags
プライベート関数¶
- _time2str [%ARGUMENTS]
-
$timestamp = _time2str( format => $YMDhms_format, use_gmtime => $boolean, );
ファイル名で使われる日付時刻文字列を返します。
YMDhmsフォーマット文字列については、
timeformat
パラメータの ドキュメントをご覧ください。backup
関数呼び出しでuse_gmtime
フラグが設定されなければ、 システムのlocaltime
が使われます。フォーマット文字列が与えられなければ、スタンプのためには空文字列が 返されます。'epoch'という文字列に設定されると、返されるスタンプの ためにはperlの
time
関数が使われます。そうでなければ、 YMDhmsフォーマット文字列が使われます。 - _format_to_regexp $FORMAT
-
$re = _format_to_regexp($YMDhms_format);
'YMDhmsフォーマット文字列'を簡単な正規表現に変換します。
この関数は単純にフォーマット文字列を\d(数字のメタキャラクタ)で 置き換えます。
- _format_to_printf $FORMAT
-
$printf_format = _format_to_printf($YMDhms_format);
この関数はYMDhmsフォーマット文字列をprintf フォーマット文字列 %0nd で置き換えます。nはそれぞれの、連続したYMDhmsフォーマット 文字の数になります。
バグ¶
同じ名前になってしまうので、1秒の間に同じもののバックアップを 2つ作ることはできません。これって本当にバグかなぁ?
TO DO¶
パラメータ並べ替えすべての端のケースをテストする!
与えられたファイル名やワイルドカードのリストの処理を制限する。
ファイルを含めるそして除外する正規表現のサポート。
Getopt::*
モジュールを使った、やさしいコマンドライン機能を作る。
OSを理解したバックアップ文字列を組み立てるためFile::Spec
あるいは Class::Path
を使う。
Unixシステムコールの代わりにArchive::Any/File/Tar/Zip
を使う。
perlモジュールでカバーされない他のアーカイバや圧縮ソフトを使う。
もちろん圧縮についても同じことをする(例えばCompress::Zlib
等).
レコード・ロックつきでデータベースにバックアップする。
File::Find
でディレクトリを降りていく。
time2str
関数のために標準ISOフォーマットを使う。
さまざまなバックアップファイルの名前付け方法を可能にする (文字列フォーマットでも)。
"数にナイーブ"で時間も考慮したkeep
オプションを作る。 ctime
とmtime
ファイル属性を考えてみてください。
ファイルシステムのディレクトリ・ツリー構造にない元ファイルが バックアップされることを可能にする。つまり"平坦化された"アーカイブ。
バックアップに使われるファイル名がユニークになるようユーザに確認 させることを可能にする。
焦点を絞りこんだバックアップ作業を実装するためFile::Backup::Base
の スーパークラスを作る。(例えばcvsやscpで、nfsあるいはレガシーな デバイスへのバックアップなど)
そう。Net::SCP
でscpをサポートする。これはFile::Backup::SCP
あるいはFile::Backup qw(scp)
なるでしょう。ウーン。
もしうまく尋ねることができたら、コードがうまくシステムのアーカイブ・プログラムを 探すようにする。
参考資料¶
謝辞¶
Ken Williams(別名 DrMath)そしてJoshua Keroes (別名 ua)の 援助、洞察、提案そして論評に感謝します。
作者(=AUTHORS)¶
オリジナル: Ken Williams, <[email protected]>
現在: Gene Boggs, <[email protected]>
著作権(=COPYRIGHT)¶
Copyright 1998-2003 Ken Williams. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
翻訳者¶
川合孝典([email protected])