File-Backup-0.0602 > File::Backup

名前

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オプションを作る。 ctimemtimeファイル属性を考えてみてください。

ファイルシステムのディレクトリ・ツリー構造にない元ファイルが バックアップされることを可能にする。つまり"平坦化された"アーカイブ。

バックアップに使われるファイル名がユニークになるようユーザに確認 させることを可能にする。

焦点を絞りこんだバックアップ作業を実装するためFile::Backup::Baseの スーパークラスを作る。(例えばcvsやscpで、nfsあるいはレガシーな デバイスへのバックアップなど)

そう。Net::SCPでscpをサポートする。これはFile::Backup::SCP あるいはFile::Backup qw(scp)なるでしょう。ウーン。

もしうまく尋ねることができたら、コードがうまくシステムのアーカイブ・プログラムを 探すようにする。

参考資料

Cwd

File::Which

LockFile::Simple

謝辞

Ken Williams(別名 DrMath)そしてJoshua Keroes (別名 ua)の 援助、洞察、提案そして論評に感謝します。

作者(=AUTHORS)

オリジナル: Ken Williams, <kwilliams@cpan.org>

現在: Gene Boggs, <gene@cpan.org>

著作権(=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.

翻訳者

川合孝典(GCD00051@nifty.ne.jp)