uudeview

バイナリファイル用の高性能なデコーダ

uudeview - バイナリファイル用の高性能なデコーダ
uudeview [-i] [-d] [-f] [-o] [-b1] [-t] [(+e|-e) extlist] [-v] [-s] [-m] [-n] [-p path] [@file] file(s)
uudeview は、電子メールや Usenet から受け取ったエンコードされた形式のファイルを デコードする。標準付属の uudecode (1) に似ているが、これよりも快適かつ柔軟である。 uudeview はエンコーディング方法として uuencoding, xxencoding, Base64, BinHex をサポートしており、分割ファイル(複数の部分に分けて送られたもの)を扱う ことができ、さらに複数のファイルを同時に扱うこともできる。したがって、 デコードの手間を大きく省くことができる。ユーザは普通、デコードの準備を するためにファイルを手で編集する必要はない。 uudeview は起動されると、与えられたファイルを全てスキャンしてデコードすべきデー タを探し、そのデータとデータに含まれるパートをソートし、うまくデコード できそうなファイルの一覧をユーザに示す。ユーザはこの一覧からデコードす るファイルを個別に選ぶ。
-i
対話機能を無効にする。ファイルのスキャンとその結果のソートを行った後、 uudeview はファイルをデコードするかどうかをユーザに問い合わせず、デコード可能な ものを即座にバッチ処理でデコードする。
-d
uudeview を desperate モードにする。このモードでは、不完全なファイルもデコード の候補となる。この機能が有効なのは 50 個のパートに分かれた投稿の最後の 部分が欠けているような場合であるが、大抵の場合は、無理にデコードしたファ イルは単に壊れているだけで利用はできないだろう。不完全なファイルがどの 程度使えるかはファイルの種類による。
-f
高速モードでファイルをスキャンする。 uudeview は各入力ファイルに多くとも 1 ファイルしか含まれていないものと想定する。 これは普通、ニューススプール内にあるファイルについては成り立つ。このオ プションを指定すると、複数の記事に分かれた入力ファイルのデコードは 中断される 。また、データが正しいかどうかのチェックも一部が無効になるので、誤りが あるファイルもおそらくデコードの候補として示される。デコードの時にエラー メッセージを受け取ることもあるし、単に不正なファイルができることもある。 このような問題に遭いたくないなら -f オプションは使わないこと。
-o
デコード時に既存のファイルを上書きすることを許可する。デフォルトでは、 上書きするか、別の名前を付けるか、そのファイルを飛ばすかの問い合わせが ユーザに対して行われる。
-v
詳細表示を 無効に する。通常、このプログラムは入力ファイルを読み込む際に何らかのステータ スメッセージを表示する。これは問題が起きたときには非常に役に立つ。この ようなメッセージが鬱陶しい場合にこのオプションを使うこと。
-p パス デコードしたファイルを書き込むディレクトリを設定する。これは有効なパス 名でなければならず、そうでない場合はファイルをデコードしようとした時に エラーとなる。デフォルト値は現在の作業ディレクトリである。
+e 拡張子 指定された拡張子を持つファイルだけを選択してデコードする。他のファイル は無視される。 +e .gif.jpg を指定すると、GIF ファイルと JPG ファイルは全てデコードされるが、TIF 等はデコードされない。拡張子のリストでは大文字と小文字は区別されない。
-e 拡張子 上記のオプションの反対の意味を持つ。 コマンドラインで \+e と -e を混ぜて使っても、希望した結果は得られない だろう。
-b1
このオプションは、サブジェクトからパート番号を取り出すという uudeview のポリシーを変更する。このオプションが必要となるのは稀であるが、 例えば複数に分割して投稿が行われた時のように、パート番号が 括弧 () や ブラケット [] 内に書かれている場合だけは必要となる。デフォルトでは、 uudeview はまず 括弧 () 内にある数字を使う。しかし、この番号が全体のファイル数 を示しており、パート番号はブラケット [] に書かれている場合には、このパ ラメータを使って uudeview に他の数字を最初に読み込ませるようにすること。このオプションは、1 種類 のブラケットしか含まないファイルや、どちらの種類のブラケットも含まない ファイルの展開には影響を与えない。必要ならば、このオプションは -b[] のように使うこともできる。
-s
「賢くなくする(minus smartness)」と読むこと。このオプションは、サブジェ クト行からパート番号を自動検出する機能を無効にする。 uudeview がサブジェクト行の正しい展開に失敗してパート番号の推定時にエラーを出力 し、パートの順番が狂う場合にはこのオプションを試すとよい。このオプショ ンを使うと、パートは必ず順番通りに繋げられる(したがって、入力ファイル ではパートを正しい順に並べなければならない)。また、このオプションを使 うと、プログラムは欠けているパートを検出することはできない。 注意: この場合でも、きちんとした MIME ファイルに含まれている正しいパート番号は評価される。このオプションを 2 回指定すると、サブジェクトそのものも無視され、パートのグループ付けに は使われない。パートを配送する一連のメッセージのサブジェクト行がそれぞ れ異なる場合には、このオプションを使用すること。
-m
ファイルのモードを無視する。uuencode や xxencode されたファイルの begin 行には、元のファイルのパーミッションが書かれている。このオプショ ンが与えられなければ、デコーダは元のパーミッションを復元しようとする。 このオプションを与えると、得られるパーミッションは 0666 からユーザの umask を引いた値となる。
-n
プログレスバーを表示しない。uudeview は通常、進行状況に合わせて 100% まで伸びてゆく横棒を ASCII 文字で表示するが、端末がこれを表示できるか どうかのチェックは行わない。端末が表示できない場合や、プログレスバーを 目障りと感じた場合にはこのオプションを使うこと。
-t
プレーンテキストのメッセージを使う。通常、uudeview はデコードの際には エンコードされたデータだけを表示する。このオプションを設定すると、 MIME メッセージに入っているテキストパートやエンコードされていないデータもデ コード対象として示される。プレーンテキストのメッセージにはファイル名が 付けられていないことが多いので、これらには 4 桁の通し番号を使ったユニー クな名前が付けられる。
ファイル(複数可) エンコードされたファイルを探すためにスキャンするファイル。ハイフン (\'-\')を指定すれば、標準入力から読み込むこともできる。指定するファイ ルの数はいくつでも良いが、通常はシェルがオプションの数を 128 個までに 制限している。ワイルドカードを使ってファイルのリストを作った場合には、 間違ってバイナリファイルをプログラムに入力しないこと。こうなった場合の 動作は未定義である。
@ファイル 追加のオプションをファイルから uudeview に読み込ませる。このファイルでは 1 行に 1 つだけオプションを書かなけ ればならない。このファイルはプログラムの終了時に 削除される 。この機能を使うとファイルを何個でも指定することができる。 find (1) の機能と組み合わせれば、ディレクトリツリー全体(ニューススプールのディ レクトリ等)を処理することができる。 環境変数 $UUDEVIEW にオプションを指定することもできる。この値はコマン ドラインのオプションを処理する前に読み込まれる。
入力ファイルを全てスキャンした後、それぞれのファイルの扱いについてユー ザに問い合わせが行われる。当然ながら普通はデコードの実行と答えるのだが、 選択肢は他にもある。以下のコマンドを使用することができる(各コマンドは 1 文字である):
d
ファイルをデコードし、デコードしたファイルを指定された名前でディスクに 書き込む。
y
(d) と同じ動作である。
x
このコマンドもファイルをデコードする。
n
このファイルをデコードしないで飛ばす。
b
前のファイルに戻る。
i
ファイルに関する情報があれば、それを表示する。マルチパートの投稿に 0 番目のパートがあればそれを表示する。0 番目のパートがなければ、エンコー ドされているデータまでにある最初のパートが表示される。
e
コマンドを実行する。どんなコマンドでも入力することができるが、この際に は多分、現在のファイルが引き数として使われるだろう。コマンドライン中の ドル記号 '$' は全て、現在のファイルのファイル名に置き換えられる(正確に は一時ファイルの名前)。この一時ファイルを使ってバックグラウンドプロセ スを実行してはならない。なぜなら、入力ファイルが突然消えた場合にプログ ラムの処理が混乱するからである。
l
ファイルをリスト表示する。このコマンドを使うのは、問い合わせ対象のファ イルがテキストファイルの場合だけにすること。そうでない場合にはゴミが大 量にできるだけである。
r
名前を変える。別の名前を選んで、そのファイルを新しい名前で保存すること ができる。
p
デコードしたファイルを書き込むパスを設定する。このパスは、コマンドライ ンオプションの -p コマンドで設定することもできる。
q
即座にプログラムを終了する。
?
以上のコマンド全ての簡単な説明を表示する。 コマンドを入力しないで、プロンプトでリターンキーだけを叩いた場合には、 デフォルトのコマンドであるファイルのデコードが実行される。
詳細表示モード(つまり、-v オプションで詳細表示を無効にしていない場合) では、進行状況メッセージが出力される。このメッセージはプログラムの実行 を追跡するのに非常に便利であり、これを理解できればファイルのデコードに 失敗した原因の追求に使うことができる。このセクションではメッセージの解 釈の仕方を説明する。プログラムを操作するだけならば、このセクションを理 解することはあまり重要でない。 最初は「ロード中」のメッセージである。これは文字列 Loaded で始まる。 それぞれの行は以下の要素を示さなくてはならない:
入力ファイル 最初の要素はソースファイルであり、ここからパートがロードされる。 1 つのファイルから多くのパートが検出されることもある。
サブジェクト行 完全なサブジェクトがシングルクォートで括られた形で再現される。
識別子 このプログラムは、同じファイルに属していると思われる記事をまとめるため、 サブジェクト行を利用してこのスレッドをユニークに識別する。このアルゴリ ズムの結果はブレースで括って表示される。
ファイル名 サブジェクト行やデータ内でファイル名が検出されたかどうか(例えば、begin 行や Content-Type 情報の一部として検出される)。
パート番号 パート番号を表す。サブジェクト行から取り出されたり、きちんとした MIME 形式のメッセージの場合には「パート」情報から取り出されたりする。
Begin/End
begin トークンや end トークンが検出された場合、それがここで出力さ れる。
エンコーディング型 このパート内でエンコードされたデータが検出された場合、UUdata, Base64, XXdata, Binhex のいずれかが出力される。 スキャンが終わった後にはこれ以外のメッセージが出力される。記事のグルー プそれぞれに対して 1 つの行が出力される。この行の内容は例で見る方が分 かりやすいだろう。以下に例を示す: Found 'mailfile.gz' State 16 UUData Parts begin 1 2 3 4 5 end 6 OK この行はファイル mailfile.gz が見つかったことを示す。ファイルは uuencode されており(UUData)、6 つ のパートからなる。また、begin トークンが最初のパートで見つかり、 end トークンが 6 番目のパートで見つかった。全て揃っているように見え るので、このファイルには OK のタグが付けられる。 State には以下に示す各種ビットが設定される。ビットの値は OR されることもあるだろう。
1
欠けているパートがある
2
Begin が無い
4
End が無い
8
エンコードされているデータが見つからない
16
ファイルは問題なしと思われる
32
ファイルのデコード時にエラーが起きた
64
ファイルがうまくデコードできた
このプログラムは、標準入力から読み込みを行うときには端末の入力を受け取 ることができないので、この場合には対話機能は自動的に無効にされる。 MIME 形式のメッセージヘッダが検出されたときは、このプログラムはほぼ MIME 準拠の動作を行う。 「 ほぼ 」というのは、規約ではファイルが複数のメッセージを含むことは認められて いないけれど、 uudeview はこの制限なしで動作するからである。実際には、コマンドラインオプション -f を用いて必ずこの状態になるようにすれば、このプログラムは RFC1521 に完 全に準拠する。 (このオプションが設定されていても、正しい MIME マルチパートメッセージ に含まれるパートは全て処理される。) スキャンの処理部分は、MIME メッセージの外部にある短い Base64 データ(4 行以下)を無視することがよくある。この状態に対するチェックがいくつか desperate モードで行われるが、これを行うとエンコードされたデータを誤っ て検出し、不正なファイルができることがある。 ファイルは最初は必ず一時ファイルにデコードされ、その後に最終的な場所に コピーされる。これは、後になってからデコードできないことが分かるような データで既存のファイルを誤って上書きすることを防ぐためである。したがっ て、必要なサイズの 2 倍の空きスペースを予め確保すること。また、標準入 力から読み込みを行う時には、全てのデータは一時ファイルに書き込まれ、そ の後にこのファイルに対して通常のスキャン処理が始められる。 Subject 行があれば、 uudeview は必要な情報全てをこの行から取り出そうとする。Subject 行にゴミが入っ ている場合や、プログラムがユニークな識別情報とパート番号を Subject 行 から見つけられなかった場合でも、 uudeview は別のヒューリスティクスを用いてファイルをデコードすることができるが、 この場合の結果は運任せである。 ただし、これが関係あるのはファイルが分割されている場合だけである。エン コードされたファイルが全て 1 つのパートだけからなる場合には何も心配す る必要はない。 このプログラムの名前を変えたり、コピーしたり、リンクをすることによって uudecode にした場合、このプログラムは標準の uudecode の高性能な代用プログラムとして動作し、同じコマンドラインオプションを受 け付ける。ただし、テストはまだ十分でない。
uuenview (1), uudecode (1), uuencode (1), ウェブ上にある uudeview のホームページ: http://www.uni-frankfurt.de/~fp/uudeview/
名前がハイフン('-')で始まるファイルを読み込むには、パス名(例えば './') を前に付けること。 バグとして報告する前には、そのファイルが他の手段でデコードできることを 確かめること。作者は、全くのゴミのデコードに失敗したと後でわかるような バグ報告は受け取りたくない。 バグを見つけたと思ったら、入力ファイル(できれば単に入れるだけでなく、 元のファイルに圧縮とエンコードを施すこと)とプログラムのメッセージのリ スト(詳細表示モード)を fp@informatik.uni-frankfurt.de 宛に送ること。 現在は BinHex データに入っているチェックサムは無視される。 このプログラムは、分割されたマルチパートメッセージ(複数のメールに分割 された MIME 形式のマルチパートメッセージ)を完全に処理することができな い。各パートが識別されて 1 つにまとめられ、これに含まれているマルチパー トメッセージがプレーンテキストファイルに「デコード」されるが、このファ イルを再び uudeview に入力しなければならない。しかし、このようなメッセージは滅多にないので 心配する必要はない。