shar

シェルアーカイブを作成する

shar - シェルアーカイブを作成する
shar [ options ] file ...
shar -S [ options ]
shar は「シェルアーカイブ (shar ファイル)」を作成する。 これはテキスト形式なので、メールで送ることができる。 これらのファイルをほどくには、 /bin/sh を使って実行すればよい。 作成されたアーカイブは、\f2-o\f1 オプションで指示されない限り、 標準出力に送られる。 shar には様々な機能があるので、 shar ファイルの作成や shar の「賢さ (smartness)」の指定は、非常に柔軟に行うことができる。 アーカイブは、「簡潔 (vanilla)」にも詳細にもできる。
オプションには、- で始まる 1 文字のバージョンと、 -- で始まる長いバージョンがある。 \f2--help\f1, \f2--version\f1, \f2--no-i18n\f1, \f2--print-text-domain-dir\f1 は例外で、 短いバージョンがない。 長いオプションに必須の引き数は、短いオプションでも必須である。 オプションはどのような順番でも与えることができる。 互いに依存しているオプションもある。たとえば、
\f2-l\f1 や \f2-L\f1 オプションを使う場合、\f2-o\f1 オプションが必要である。
\f2-a\f1 オプションを使う場合、\f2-n\f1 オプションが必要である。
下記の \f2-V\f1 オプションも参照すること。

フィードバックを与える:

\f2--help\f1 ヘルプを標準出力に表示し、すぐに終了する。 \f2--version\f1 プログラムのバージョン番号を標準出力に表示し、すぐに終了する。 \f2-q\f1 \f2--quiet\f1 \f2--silent\f1 アーカイブを作成するとき、詳細なメッセージを出力しない。

ファイルの選択:

\f2-p\f1 \f2--intermix-type\f1 指定位置に依存するパラメーターオプションの使用を許す。 \f2-B\f1, \f2-T\f1, \f2-z\f1, \f2-Z\f1 オプションを (ファイルリストに) 入れてよい。 このオプションの後ろのファイルはすべて、指示されたモードで処理される。 \f2-S\f1 \f2--stdin-file-list\f1 コマンドラインからではなく、標準入力からパックするファイルの一覧を読み込む。 入力は find コマンドで生成される形式と同じく、 1 行に 1 つのファイル名でなければならない。 パックするファイルの一覧をコマンドラインに書けない場合に、 このオプションは非常に役立つ。たとえば、


\f2-p\f1 が指定された場合、 \f2-B\f1, \f2-T\f1, \f2-z\f1, \f2-Z\f1 オプションを 標準入力に入れることができる (行はファイル名で区切られる)。 標準入力の行数、ファイル名、オプションは最大 1024 を越えてはならない。

出力の分割:

\f2-o\f1 XXX \f2--output-prefix=\f1XXX アーカイブを標準出力に送らず、ファイル XXX.01 から XXX.nn に保存する。 \f2-l\f1 または \f2-L\f1 オプションを使う場合、 このオプションを使うこと。 \f2-l\f1 XX \f2--whole-size-limit=\f1XX 出力ファイルのサイズを XX キロバイトに制限しようとする (このサイズより小さくなる場合は、 複数の入力ファイルをまとめた出力ファイルを作成する)。 しかし、(1 つの入力ファイルをアーカイブしたサイズが これより大きくなる場合でも) 入力ファイルを途中で分割しない。 \f2-L\f1 XX \f2--split-size-limit=\f1XX 出力ファイルのサイズを XX キロバイトに制限し、必要ならば分割する。 このオプションで作られた、分割形式のアーカイブファイルは、 正しい順番でファイルを取り出さなければならない。

shar ヘッダーの制御:

\f2-n\f1 name \f2--archive-name=\f1name shar ファイルのヘッダーにアーカイブ名を入れる。 \f2-a\f1 オプションを参照すること。 \f2-s\f1 who@where \f2--submitter=\f1who@where 自動的に決定される作成者名を上書きする。 \f2-a\f1 \f2--net-headers\f1 次のようなヘッダーを自動生成する。
Submitted-by: who@where
Archive-name: <name>/part##
<name> は \f2-n\f1 オプションで指示しなければならない。 name に '/' が含まれている場合、/part は使われない。つまり、
10m
30n
-n xyzzy	の場合:
xyzzy/part01
xyzzy/part02

-n xyzzy/patch の場合: xyzzy/patch01 xyzzy/patch02
-n xyzzy/patch01. の場合: xyzzy/patch01.01 xyzzy/patch01.02
who@where がデフォルトでは不適切な場合、\f2-s\f1 オプションを使って明示的に宣言できる。 who@where は本来 `whoami`@`uname` で作られる。 \f2-c\f1 \f2--cut-mark\f1 shar ファイルを cut line で始める。'Cut here' と書かれた行が、 各出力ファイルの先頭に置かれる。

ファイルの格納法の選択:

\f2-M\f1 \f2--mixed-uuencode\f1 混合モード。ファイルがテキストなのかバイナリなのかを決定し、 正しくアーカイブを作る (デフォルトである)。 バイナリであるとわかったファイルは、パックする前に uuencode される (ネットワーク上の多くの人に、uuencode の使用は煙たがられる)。 \f2-T\f1 \f2--text-files\f1 すべてのファイルをテキストとして扱う。 \f2-B\f1 \f2--uuencode\f1 すべてのファイルをバイナリとして扱い、パックする前に uuencode する。 このオプションは、アーカイブのサイズを増大させる。 受信者は、ファイルを取り出すために uudecode を持っていなければならない (ネットワーク上の多くの人に、uuencode の使用は煙たがられる)。 \f2-z\f1 \f2--gzip\f1 パックする前に、すべてのファイルを gzip して uuencode する。 受信者は、ファイルを取り出すために uudecode と gzip を持っていなければならない (ネットワーク上の多くの人に、uuencode と gzip の 使用は煙たがられる)。 \f2-g\f1 LEVEL \f2--level-for-gzip=\f1LEVEL 圧縮するとき、'-LEVEL' を gzip のパラメーターとして使う。 デフォルトは 9 である。 \f2-g\f1 オプションは、デフォルトで \f2-z\f1 オプションをオンにする。 \f2-Z\f1 \f2--compress\f1 パックする前に、すべてのファイルを compress して uuencode する。 受信者は、ファイルを取り出すために uudecode と compress を持っていなければならない (ネットワーク上の多くの人に、uuencode と compress の 使用は煙たがられる)。 \f2-C\f1 オプションは、\f2-Z\f1 と同義であるが、推奨されない。 \f2-b\f1 BITS \f2--bits-per-code=\f1BITS 圧縮するとき、'-bBITS' を compress のパラメーターとして使う。 \f2-B\f1 オプションは、デフォルトで \f2-Z\f1 オプションをオンにする。 デフォルトの値は 12 である。

転送エラーに対する保護:

\f2-w\f1 \f2--no-character-count\f1 ファイルを取り出すした後、'wc -c' を使って各ファイルをチェックしない。 デフォルトではチェックする。 \f2-D\f1 \f2--no-md5-digest\f1 取り出したファイルを検査するために 'md5sum' ダイジェストを使わない。 デフォルトでは、チェックする。 \f2-F\f1 \f2--force-prefix\f1 必要がない場合でも、強制的にプレフィックス文字 (\f2-d\f1 オプションの引き数が 'X' で始まっていない限り、通常は 'X') を すべての行の行頭におく。 特に \f2-B\f1 や \f2-Z\f1 が使われる場合、 このオプションはアーカイブのサイズを少し増加させる。 \f2-d\f1 XXX \f2--here-delimiter=\f1XXX SHAR_EOF のかわりに XXX を shar アーカイブの中のファイルの境界に使う。 このオプションは、shar ファイルをその人独自のものにしたい人のためにある。

何種類かの shar ファイルの作成:

\f2-V\f1 \f2--vanilla-operation\f1 unshar をする環境に sed と echo だけがあれば良いような、 「簡潔な (vanilla)」shar ファイルを生成する。 さらに、\f2-x\f1 オプションを使わないときは、 if test をサポートしなければならない。 \f2-V\f1 オプションは、network cop (または、brown shirt (訳註:やたらと検閲したがる人)) が 不快に感じるオプションを暗黙のうちに不可にする。 しかし、\f2-B\f1, \f2-z\f1, \f2-Z\f1, \f2-p\f1, \f2-M\f1 オプションと同時に指定されると、警告を発する (これらのオプションは、unshar をする環境に uudecode, gzip, compress を必要とする)。 \f2-P\f1 \f2--no-piping\f1 shar ファイル (の展開) にパイプではなく一時ファイルを使う。 \f2-x\f1 \f2--no-check-existing\f1 チェックせずに、既に存在するファイルを上書きする。 \f2-x\f1 も \f2-X\f1 も指定されない場合は、 アーカイブからファイルを取り出すときに、 既に存在するファイルをチェックして上書きしない。 ファイルを取り出すとき、
10m sh archive -c というように、\f2-c\f1 がスクリプトへの引き数として渡されると、 既に存在するファイルが無条件に上書きされる。 \f2-X\f1 \f2--query-user\f1 ファイルを取り出すとき、ファイルの上書きをユーザーに対話的に尋ねる。 (ネットワーク上に送信する shar ファイルに使ってはならない)。 \f2-m\f1 \f2--no-timestamp\f1 アーカイブからファイルを取り出すときに 'touch' コマンドを生成しない。 ファイル修正日時は復元されない。 \f2-Q\f1 \f2--quiet-unshar\f1 詳細出力をしない。 ファイルを取り出すときに出力されるコメントをアーカイブに含めない。 \f2-f\f1 \f2--basename\f1 パスを考慮せず、ファイル名だけで復元をする。 このオプションはファイル名だけが使われるようにする。 shar ファイルが複数のディレクトリから作られる場合に役立つ。 ディレクトリ名が shar に渡される場合、 \f2-f\f1 オプションが指定されているかどうかに関係なく、 そのディレクトリ以下の階層は復元されることに注意すること。

国際化:

\f2--no-i18n\f1 国際化されたシェルアーカイブを作らず、デフォルトの英語メッセージを使う。 shar は通常、 アーカイブからファイルを取り出すときに (環境変数 LANG/LC_MESSAGES で決定される) その人の好みの言語で メッセージを出力することができるアーカイブを作る。 ファイルを取り出すとき、その人の言語のメッセージファイルがない場合は、 メッセージは英語になる。 \f2--print-text-domain-dir\f1 shar がいろいろな言語のメッセージファイルを見つけるための ディレクトリを表示し、すぐに終了する。
37n
shar *.c > cprog.shar	# すべての C プログラムソース
shar -Q *.[ch] > cprog.shar	# 詳細出力なし。.c と .h ファイル
shar -B -l28 -oarc.sh *.arc	# すべてのバイナリ .arc ファイルを、
# ファイル arc.sh.01 - arc.sh.NN へ
shar -f /lcl/src/u*.c > u.sh	# ファイル名のみを使用

ファイルを取り出すとき作られるディレクトリに対して、 chmod と touch が起動されることはない。 よって、ディレクトリを shar でパックすると、 取り出されたディレクトリのアクセス権・修正日時は、 元のディレクトリのものと一致しない。 shar にディレクトリを渡すと、 ディレクトリは 2 回以上スキャンされる。 よって、shar が動作している間にディレクトリを変更しないように 注意しなければならない。 出力ファイルが入力ファイルに含まれないように注意すること。 さもないと、shar はディスクが溢れるまでループする。 特に、shar にディレクトリを渡すときは、 出力ファイルをそのディレクトリ (もしくはそのサブディレクトリ) に 置かないように注意すること。 \f2-B\f1, \f2-z\f1, \f2-Z\f1, 特に \f2-M\f1 を使うと、 ファイル数に応じてアーカイブプロセスが非常に遅くなる。 \f2-X\f1 オプションを使うと、多くの unshar プロセスで \f2\間違いなく\f1 問題を引き起こす shar ファイルが作られる。 この機能を使うのは、合意の取れた集団内で受け渡されるアーカイブのみにすること。 もちろん、\f2-X\f1 は Usenet に発信される シェルアーカイブのためのものではない。 \f2-B\f1, \f2-z\f1, \f2-Z\f1 をネットワーク上の shar ファイルに使うと、 非常に非難されるだろう。 \f2-m\f1 と \f2-F\f1 を使わない場合も、時々苦情を言われるだろう。
不正なオプション・矛盾するオプション、 一般でないファイル・見つからないファイル・アクセスできないファイル、 (有り得ない) メモリ割り当ての失敗、に対するエラーメッセージ。
shar と unshar プログラムは多くの著者の協同作品である。 多くの人々が、問題の報告・いろいろな改良の示唆・実際のコードの提供に 貢献してくれた。 これらの人々は sharutils ディストリビューションの THANKS というファイルにリストされている。