+-----------------------------------------------------------------------+
|                                                                       |
|                         Fast Webpage Exchanger                        |
|                                                                       |
|                 Copyright (C) 1999-2000 Yuuki NINOMIYA                |
|                                                                       |
+-----------------------------------------------------------------------+

◆概要

　Fast Webpage Exchanger (weex) は web ページあるいはその他のアーカイブを
遠隔メンテナンスする作業を自動化するために作成された非対話型 FTP
クライアントです。weex を使えば web ページを FTP でサーバに転送する作業を
大幅に簡略化することができます。

ウェブマスタは転送したいファイルとディレクトリをローカルに用意し、単に
weex を実行するだけで更新する必要があるファイルのみがリモートに
転送されます。
リモートサーバにローカルと同じ構成を作るために、このプログラムは
ファイル/ディレクトリを自動的に作成/削除します。

　「weex」は WEb EXchanger の略称であり、「weeks」のように発音します。
　「weex」を使って、毎週 web ページをアップデートしましょう。:-)


◆特徴

  ・あらかじめ設定した内容を用い、非対話的に動作。
    1度設定を行っておけば、「weex hostname」とするだけで全自動で動作。
    同じホストに何度も転送を行う、web ページの更新にぴったりです。

  ・複数のホストが設定でき、連続して転送することが可能。
    設定できるホスト数に制限はありません。そうして 2 ヶ所以上のホストに
    連続して転送することが可能です。もちろん複数の weex を同時に使用
    することもできます。

  ・タイムスタンプを比較し、前回転送後に更新されたファイルだけを転送します。

  ・リモート側にのみ存在するファイルやディレクトリを自動的に削除。
    もちろん削除しないように設定することも可能です。

  ・無視したいファイルやディレクトリを設定することが可能。
    まだ工事中のディレクトリや、バックアップファイルが転送されてしまう
    のを防ぐための機能です。ローカル側だけでなくリモート側にも設定できます。
    さらに、これらの指定にはワイルドカードが使用できます。

  ・転送したファイルのパーミッションを変更可能。
    転送した後、アクセス権限を指定したものに変更できます。CGI プログラム
    などを転送する際に重宝します。
    あるいはローカルファイルのパーミッションをリモートにコピーする
    こともできます。

  ・大文字小文字を区別しない FTP サーバに対しても使用可能。
    ファイル名を小文字に変換してから転送する機能を搭載しています。

  ・キャッシュ機能を搭載。
    ディレクトリ構造、ファイル名、および各ファイルのタイムスタンプを
    キャッシングするので、ディレクトリ数やファイル数が増えてもほとんど
    速度が落ちません。

  ・ファイルを転送する際に進捗状況を表示します。
    大きなファイルを転送する時に、何バイト転送したかがわかります。

  ・ログ記録機能を搭載。
    cron で自動運転する時やバックグラウンドで動作させる時に役立ちます。

  ・gettext に対応。
    メッセージの出力に gettext を使用していますので、メッセージ
    カタログさえ作ればどの言語でも使用できます。現バージョンでは
    日本語とドイツ語とスペイン語とオランダ語とフランス語のメッセージ
    カタログが用意されています。


◆インストール方法

　「./configure」で「make」で「make install」です。
　この後、以下に従って設定ファイルを適切に書き換えます。


◆設定ファイルの詳細

　設定ファイルは「~/.weex/weexrc」または「~/.weexrc」です。
このファイルがなければ動作しません。
　生のパスワードを記述するので、安全のため、設定ファイルのパーミッションは
0600 にしておいてください。パーミッションの下 2 つが 00 でなかった場合は
起動時に警告メッセージが出ます。

　空白文字 (スペース) とタブ文字は常に読み飛ばされます。これらの
特殊文字を含みたい場合はダブルクォーテーション (") かシングル
クォーテーション (') で全体を囲みます。
　ダブルクォーテーションを含みたい場合はシングルクォーテーションで
囲んでください。逆も ok です。
　シャープ記号 (#) の後ろはコメントと認識し、読み飛ばされます。
値の中にシャープ記号を使いたい場合は、全体をクォーテーションで
囲ってください。
　セクション名とパラメータは大文字小文字を区別しません。「HostName」と
「HoStNaMe」は同じと解釈されます。

　設定ファイルでは、各ホスト名をセクション名として利用しており、
それぞれのセクションごとに各設定を記述します。セクション名は大括弧
([]) で囲んでください。
　ホスト名「default」だけは特別扱いで、他のホストの設定において
省略した項目は、ホスト「default」のものが使用されます。

　基本的な記述は、パラメータと値をイコール (=) で結んだものです。

-----------------------------------------------------
HostName        = www.enjoy.ne.jp
LoginName       = ninomiya
Password        = yuuki
-----------------------------------------------------


　複数の値を設定したい時は、同じパラメータを 2 回設定するか、
あるいは値を中括弧 (ほんとはこれが大括弧？) で囲ってください。

-----------------------------------------------------
IgnoreLocalDir  = /mnt/gm1/data/file/gms_page/nifty
IgnoreLocalDir  = /mnt/gm1/data/file/gms_page/backup

IgnoreLocalFile = {
	/mnt/gm1/data/file/gms_page/nosend.html
	/mnt/gm1/data/file/gms_page/bak.html
}
-----------------------------------------------------


　もし 1 つしか設定できないパラメータに複数の値を設定した場合には、
一番最後に指定した内容が有効になります。
　複数指定可能な項目の場合、設定可能な数に制限はありません。
　ディレクトリおよびファイルの指定 (SrcDir と DestDir は除く) には、
シェルで用いられているワイルドカード表現が使用できます。
　ディレクトリの指定において、最後の '/' は付けても付けなくても構いません。
ファイルの指定では、絶対パスで記述した場合にはその指定されたファイルのみが
有効となり、ファイル名のみを指定した場合には、全ディレクトリで有効になります。
　SrcDir と DestDir 以外のディレクトリ/ファイルの設定には絶対パスと
相対パスの両方が指定できます。ただし、SrcDir と DestDir には必ず絶対パスを
指定してください。
　DestDir が「/public_html」である場合のファイルの指定において、
「/public_html/ignoreme.html」というファイルを相対パスで指定しようとして
「ignoreme.html」としてしまうと、全てのディレクトリで有効になってしまうので、
このファイルだけを指定したい場合は「./ignoreme.html」としてください。
　真偽値を取るパラメータは、「True」「Yes」「T」「Y」「1」
なら有効に、「False」「No」「F」「N」「0」なら無効になります。
大文字小文字は区別しません。


　それでは各ホストの設定を見ていきましょう。

  ・HostName		接続するホスト名です。当然ながら「ftp://」は
			いりません。
			IP アドレスでも構いません。

  ・LoginName		そのホストにログインするためのログイン名。

  ・Password		上記ログイン名でログインするのに必要なパスワード。
			パスワードをそのまま記述してください。
			もしこのパラメータが存在しなかったら、weex は実行時に
			パスワードを尋ねるようになります。

  ・SrcDir		転送元ローカルディレクトリ。絶対パス (pwd で
			表示されるパス) で記述してください。
			シンボリックリンクされているディレクトリの中だと、
			シェルが表示しているパスと pwd で表示されるパスが
			異なっているので注意。
			一致している事を pwd コマンドでチェックしてください！

  ・DestDir		転送先リモートディレクトリ。これも絶対パスで
			記述してください。FTP コマンドで接続して pwd で
			チェックするといいでしょう。

  ・IgnoreLocalDir	無視するローカルディレクトリ。ここに指定されたディレクトリは
			存在しないものとして処理されます。
			複数指定可。

  ・IgnoreLocalFile	無視するローカルファイル。ここに指定されたファイルは
			存在しないものとして処理されます。
			複数指定可。

  ・IgnoreRemoteDir	無視するリモートディレクトリ。ここに指定されたディレクトリは
			存在しないものとして処理されます。
			複数指定可。

  ・IgnoreRemoteFile	無視するリモートファイル。ここに指定されたファイルは
			存在しないものとして処理されます。
			複数指定可。

  ・AsciiFile		アスキー (テキスト) 形式として転送するファイル (ローカルを指定)。
			この設定に含まれないファイルはバイナリ (イメージ) 形式として
			転送されます。
			複数指定可。

  ・KeepRemoteDir	ここに指定されたディレクトリでは、ローカルにファイルがなくても
			リモートファイルが削除されません。
			複数指定可。
			ここでちょっとしたテクニックを披露！
			一切リモートファイルを削除させないようにするには、
			KeepRemoteDir = {
				*
				.
			}
			とします。「*」だけじゃなく、「.」も一緒に指定するのがコツ。
			なぜそうしないといけないのかは「weex -d」とすれば一目瞭然。

  ・ChangePermissionDir	転送後にパーミッションを変更したいディレクトリを指定します。
			*ローカル* ディレクトリを指定してください。
			複数指定可。

  ・ChangePermission	上記で指定されたディレクトリ内のファイルのパーミッションを
			何に変更するか。
			8 進 3 桁で指定してください。

  ・PreservePermissionDir	ここに指定されたディレクトリ中のファイルの
				パーミッションはリモートにコピーされます。
				*ローカル* ディレクトリを指定してください。
				複数指定可。
				ChangePermissionDir と PreservePermissionDir が
				衝突した場合は前者が優先されます。

  ・NestSpaces		1 つ下位のディレクトリに入った時に、いくつ表示を右にずらすか。
			デフォルトは 4 です。
			インデントをなくしたいときには負の数を指定してください。0 を
			指定するとデフォルトの 4 が指定されたと判断されてしまいます(^^;
			誰かどうにかしてちょ。

  ・MaxRetryToSend	ファイルの転送に失敗した場合、この回数だけ再試行を行います。
			やたら反応が遅くて転送がタイムアウトしてしまう FTP サーバ
			対策です。
			デフォルトは 8 です。
			再試行をやめさせるには例によって負の数を指定してください。
			0 を指定するとデフォルト値が採用されます。

  ・ConvToLower		これを「true」にすると、ファイルを小文字に変換してから転送します。
			FTP サーバが大文字小文字を区別してくれない場合に使用します。
			ファイルを小文字に変換するとファイル名が衝突する場合は
			警告メッセージを出力します (転送は正常に行われません)。
			デフォルトは「false」です。

  ・OverwriteOK		これを「false」にすると、ファイルを上書きする際に、そのファイルを
			一旦削除してから転送します。上書きが禁止されている FTP サーバの
			ための設定です。処理速度が落ちますので、 通常は有効にしておいて
			ください。
			デフォルトは「true」です。

  ・RecordLog		これを「true」にすると、ログ (実行記録) が作成されるようになります。
			ログファイルは「~/.weex/weex.log」です。
			デフォルトは「true」です。

  ・LogDetailLevel	ログをどれくらい詳しく記録するかを指定します。
			いずれを指定しても、接続切断のメッセージとエラーメッセージは
			必ず記録されます。
			weex が正常に終了したかどうかは、切断メッセージの直前に
			「完了」と記録されているかどうかで判定できます。

			1 以下 ... 各接続毎にいくつファイルを転送/削除したかを記録
			2 ........ さらに各ディレクトリ毎の転送/削除数も記録
			3 以上 ... さらに転送/削除を行った各ファイルの名前も記録

			デフォルトは 1 です。

  ・Silent		これを「true」にすると、エラーメッセージ以外の出力を抑制します。
			デフォルトは「false」です。

  ・Monochrome		これを「true」にすると、エスケープシーケンスを用いたカラー表示ではなく
			白黒でメッセージを出力します。
			デフォルトは「false」です。

  ・Force		これを「true」にすると、タイムスタンプに関係なく全ファイルを
			無条件で転送します。
			デフォルトは「false」です。

  ・FtpPassive		もし FTP サーバが PASV モードをサポートしていなかった場合、
			「false」を指定してください。PORT モードでアクセスするように
			なります (ただし速度が低下する可能性があります)。
			デフォルトは「true」です。
			(FAQ.ja も読んでください)

  ・ShowHiddenFile	これを「true」にすると、普通に ls しただけでは隠しファイル
			(ドットで始まるファイル) が表示されない FTP サーバで隠しファイルが
			認識できるようになります。
			デフォルトは「false」です。

  ・FollowSymlinks	これを「true」にすると、ローカルのシンボリックリンクを展開します。
			デフォルトは「false」です。デフォルトではディレクトリのリンクは
			サイズ 0 バイトのファイルとして扱われます。

  ・ChdirAtConnection	これを「true」にすると、接続時にリモートのカレントディレクトリを
			DestDir に変更します。
			もし接続時のリモートカレントディレクトリが DestDir と同じであれば
			このパラメータを「false」に設定することで、weex がほんの少し早く
			動作します。
			デフォルトは「true」です。

　以上が設定ファイルの詳細です。もちろん記述する項目に順番はありません。
　「sample.weexrc」を参考にして書いてください。


◆コマンドラインオプション

使用法: weex [オプション] ホスト...

　ホストはセクション名として指定したものです。ホストは名前でなく、番号で
指定することも出来ます。
　解釈できないオプションやホスト名 (番号) が指定された場合、usage を表示して
終了します。

オプション:
  -u | --usage          使い方を表示して終了します。
  -s | --silent         エラーメッセージ以外を表示しません。
                        転送中のファイル名なんかを表示しなくなります。
  -f | --force          全ファイルを強制的に転送。なんらかの理由で
                        ファイルが正常に転送されない場合使ってください。
  -m | --monochrome     メッセージをモノクロで表示するようにします。
  -r | --rebuild-cache  キャッシュファイルを再構築
  -t | --test           リモートのファイル/ディレクトリを一切変更しません。
  -d | --debug-config   各ホストの設定を表示します。
  -D | --debug-ftplib   ftplib のデバッグ情報を出力
  -V | --version        バージョン情報を表示します。

　出力メッセージは gettext により国際化に対応しています。
設定されているロカール (環境変数 LANG) に合わせて表示言語が
切り替わります。


◆具体的な使用例

  ・weex hoge		通常の利用法です。

  ・weex hoge tara	複数のホストにアップロードするならこういう感じです。

  ・weex 2 1		ホストは番号で指定することもできます。

  ・weex 4 hoge 7 tara	こういうことも可能。

  ・weex 3 3 3		まったく無意味だが(笑)。

  ・weex -s hoge	こうすればメッセージを表示しなくなります 
			(エラーメッセージは表示される)。

  ・weex 1 >& /dev/null	これならエラーメッセージも表示されんぞ(笑)。

  ・weex -m hoge	メッセージがモノクロで表示されます。

  ・weex 3 -f		ホスト番号 3 に強制アップロード。

  ・weex -t hoge	リモートホスト hoge のファイルは一切変更されません。

  ・weex -r tara	なんらかの事情でキャッシュファイルが破壊されて
			しまったときには、これでキャッシュを再構築してください。

  ・weex -h		usage を表示。

  ・weex		これもやっぱり usage を表示。

  ・weex -d		各ホストの設定内容を表示します。正しく
			読み込めているかどうか分かります。

  ・weex -D 1		FTP サーバとのやりとりが全て表示されます。
			うまく動作しないときはこのオプションを付けて
			実行したときの結果を送ってください。

  ・weex --monochrome 1	オプションはフルスペルでも ok。


◆キャッシュ機能に関する注意

　Ver 1.6.0 からタイムスタンプのキャッシュ機能を搭載しています。
以前のバージョンでは全てのリモートファイルに対して一つ一つ
タイムスタンプを取得していましたが、ファイル数が増えると非常に
速度が低下します。そこでタイムスタンプをローカルファイルに記録
(キャッシング) するようにし、そちらからタイムスタンプを取得
するようにしました。
　さらに Ver 2.5.0 からはディレクトリ構造とファイル名も
キャッシングするようにしました。これによりディレクトリ数や
ファイル数が増えてもほとんど速度が低下しなくなりました。
　別の FTP クライアントを用いてリモートファイルを変更したり、
weex が動作中に強制終了させられたり、エラーで中途終了したりすると
キャッシュの整合性が崩れますので、その際にはキャッシュファイル
(~/.weex/weex.cache.HOSTNAME) を削除するか、「--rebuild-cache」
オプションを使ってキャッシュを再構築してください。


◆制限事項

　特にありません。


◆動作確認済みOS

  ・Debian GNU/Linux 2.1
  ・Red Hat Linux 5.1/5.2/6.0/6.1J
  ・SuSE Linux 6.1/6.2/6.3/6.4
  ・Linux Mandrake 6.1
  ・FreeBSD(98) 3.0-RELEASE
  ・FreeBSD 3.3-RELEASE
  ・Solaris 2.5.1


◆通告

　このソフトではコマンドラインオプションの解析に shhopt を使用しています。
shhopt は Artistic License にて配布されており、もし望むなら shhopt のみを
切り離してそれを Artistic License に基づいて使用することができます。


◆著作権および配布・改造について

　このソフトウェアおよびドキュメントの著作権は「二之宮　祐樹」が
保持し、GNU GENERAL PUBLIC LICENSE Version 2 またはそれ以降に
従って配布されています。
　配布、および改造については GPL に従ってください。


◆利用者へお願い

　私が自ら動作をチェックできるのは、非常に限られた環境だけです。この
ソフトを使っている方は「動いたよ」とか「使ってるよ」だけで結構ですので
報告頂けたら幸いです。
　もちろん、バグ報告や要望なども歓迎します。


◆作者への連絡先

　e-mail : gm@debian.or.jp


◆最新バージョンの在処

　http://www.enjoy.ne.jp/~gm/program/weex/index-ja.html


◆メーリングリストの案内

　weex のサポート用にメーリングリストを開設しました。参加するには
以下の入会アドレスにメールを送ってください (subject と本文は
何でもいいです)。

  ・Weex日本語メーリングリスト
     投稿 : weex-ja@egroups.co.jp
     入会 : weex-ja-subscribe@egroups.co.jp
     退会 : weex-ja-unsubscribe@egroups.co.jp

  ・Weex Mailing List (英語)
     投稿 : weex@eGroups.com
     入会 : weex-subscribe@eGroups.com
     退会 : weex-unsubscribe@eGroups.com

　どしどし御参加ください。

　なお、過去ログや各種メーリングリスト関連の情報は以下のページから取得できます。

Weex日本語メーリングリスト : http://www.egroups.co.jp/list/weex-ja/info.html
Weex Mailing List          : http://www.egroups.com/list/weex/info.html


◆weexでアップロードしている(^^;)私のページの紹介

　ＧＭくんのLinux万歳!!
　http://www.enjoy.ne.jp/~gm/index-ja.html

　Linux のインストールから各種設定の変更、さまざまなアプリケーションの
紹介を、主に Debian に対して行っています。
　他に日記ともコラムともつかん文章や、Linux/UNIX 用の自作ソフトの
公開室などもあります。


---------------------------
Yuuki NINOMIYA(二之宮 祐樹)
