ホーム > HTMLに役立つヒント
> ADSLでMACサーバ・実験室 > sabun.plについて
掲示板データなどをtar.gz形式で圧縮・バックアップをとる方法は別ページでご紹介しました。
データが多いと圧縮に時間がかかるしさぁ、もーちょっとどーにかなんないの? というわけで差分ファイルを作成してくれるMacPerl用スクリプト、sabun.plの登場です。おまけでFTPアップ機能も付けました。
前提にしている使い方はこんな感じです。
1.の差分ファイルを作るのがこのスクリプトです。初めて走らせるとデータファイルを作って終了します。二度目以降は、前回のデータと比較して変更のあったファイルだけディレクトリ構造ごと抜き出します。抜き出したファイルは、サーバのデスクトップの指定したフォルダ(このフォルダは「ファイル共有」させておく)の中に、「元フォルダ名」+「_dif」というフォルダを作り、その中にディレクトリごとコピーされます。「pullout_two」と似ていますが(原型はズバリpullout_two 0.1です)、ドロップによる操作ではない点が違います。
2.はいろんな方法があると思います。FTPサーバを立ててあれば、FTPで取ってくることもできますし、LAN内ならAppleTalkで接続してコピーしてくることもできます。
3.がちょっと面倒かも。何しろ差分ファイルなので、所定の位置にそれぞれ納めてやらないといけない。最も簡単にそれができるのは、FTPで差分ファイルをアップロードすることです。どこにアップロードするかというと、自分自身のバックアップ領域です。手元のマシンがOS Xなら、簡単にFTPサーバを立てられますから、自分自身(IPアドレス127.0.0.1)にFTPでアップするのは簡単です。Windowsマシンでも同様でしょう。classic MAC OSで自分自身にFTPというのはやったことがないので不明(^^; でもできると思うっす。
このサーバのASSblogのデータはこの方法でバックアップをとっています。このマシンでは300程度のファイルを調べて差分をつくるのに1分程度かかります。その間もサーバはちゃんとブラウザの要求に反応してくれます(web共有でテスト済み)。
このスクリプトは、例によって好きなように改造して使ってもらってかまいません。再配布もご自由にどうぞ。ただし、オウンリスクでお願いします。損害を被っても補償はありません。
・sabun.pl011.txt ver.0.11 2006/10/1 for MacPerl
・pullout_two 0.1をベースに、ドロップレット形式から指定方式に改め、FTP機能を付けたもの。設定によって、差分ファイルを作った後、自動的に指定したサーバにFTPでアップロードすることができる。
・perlのわかる人は、スクリプトを開くと「お、UNIXでも動くのか」とお思いでしょうが、動きません。たぶん(^^; 全然検証していないので保証できかねます。MacPerlで使ってやってください。
最初に、上のスクリプトをテキストファイルとして保存してください。このとき、名前の先頭に「_」をつけてください。「_sabun.pl」みたいに。下の設定にありますが、「_」で始まるファイルやフォルダは無視します。自分自身をコピーしないための措置です。設定を変更したなら、それに合わせて変えてください。
また、差分ファイルを作るフォルダの中に、自分自身のエイリアスがあると無限ループに陥ります。それを防ぐために、エイリアスの名前の先頭にも「_」をつけておくことをお勧めします。
miやJeditなど文字コード/改行コードをコントロールできるテキストエディタで、スクリプトを開き、次の部分を修正します。
##############################################
# 変数の設定
##############################################$lasttimefile = '_最終チェック日'; # 前回のmake時間とファイルデータを覚えておくファイル ← このファイルを覗かれるとファイル構成が分かってしまい、セキュリティホールになっちゃいます。web共有/QPQ1.02の場合、日本語にしておけば送信されないようです。念のため名前を変えておいた方がいいでしょう。
$omittxt = '_'; # この文字列で始まるフォルダ/ファイルは無視する ← 変更しない方が無難
# MacPerlの場合:デスクトップの出力用フォルダ名。空ならデスクトップに書き出される。
# MacPerlの例:「共有:」とすると、デスクトップにある「共有」フォルダ内に書き出される。最期の「:」を忘れずに
# UNIX perlの場合:出力用ディレクトリの絶対パス。
# UNIX perlの例:「/Users/name/Desktop/backup/」最期の「/」を忘れずに
$outdir = "共有:"; ← 適当に変更してください。#### FTP関係の設定
$afterftp = '0'; # 抜き出した後、FTPでアップロードするなら1、しないなら0か空。 ← 必要に応じて変更。# FTPアップロードするなら以下も設定が必要。しなければままでOK。
$hostname = "abcdefg.ne.jp";# 接続先 ← 必要に応じて変更。
$loginname = "yourname";# ID ログイン名 ← 必要に応じて変更。
$loginpasswd = "loginpasswd";# ログインパスワード ← 必要に応じて変更。
$basedir ="/html/dirname/" ; # アップ先ディレクトリをFTPのフルパスで ← 必要に応じて変更。
$pasv = "1"; # モード指定。空ならアクティブモード、1ならパッシブモード ← 必要に応じて変更。
「$basedir ="/html/dirname/" ; # アップ先ディレクトリをFTPのフルパスで」はちょっと説明が必要かな。手っ取り早いのは、FetchのようなFTPソフトを立ち上げて、階層をチェックすることです。下の図でいうと、「/public_html/navi/」となります。

変更したら、保存します。このとき、文字コードをSJIS(MA OSのファイルシステムはSJISのようなので、この方が面倒がない)、改行コードをCRにしてください。
次に保存したスクリプトをMacPerlで開き、dlopletとして保存し直します。これはシステムにこれがアプリケーションだと教えるためです。同時に、設定の内容を他人に知られないためです。テキストファイルだとブラウザから開けますので、FTPの設定とか、他人に知られちゃマズイものがばれちゃいます。アプリケーションならサーバの外には送信されません。
できあがったdlopletを、バックアップしたいディレクトリの中に置きます。sabun.plは、自分の置かれた場所を自動取得して、自分のいるディレクトリを処理対象にします。
これは簡単。cron系アプリケーションで、「_sabun.pl」を定期的に実行するように登録するだけです。
できあがった差分ファイル(「_dif」フォルダ)は、手元のマシンにコピーしたら消しておきましょう。あ、FTPする設定になっていると、FTPが成功した時点で自動的に「_dif」フォルダは削除されます。FTPに失敗するとそのまま残り、次回の処理時にもう一度FTPを試みます。
なお、「_dif」フォルダの中はスクリプトを実行させるたびに上書きされていきます。例えば1日1回差分ファイルを作るように指定したとして、1週間放っておくと、1週間分の差分ファイルが「_dif」フォルダの中にできあがっています。同一のファイルは上書きされて最新版になっています。なので、スクリプトの実行は1日1回、それを手元のマシンにコピーするのは1週間に1回といった使い方でも問題はありません。
ホーム > HTMLに役立つヒント
> ADSLでMACサーバ・実験室 > sabun.plについて