書式
shar [ options ] file ...
shar -S [ options ]
説明
shar
は「シェルアーカイブ
(shar
ファイル)」を作成する。
これはテキスト形式なので、メールで送ることができる。
これらのファイルをほどくには、
/bin/sh
を使って実行すればよい。
作成されたアーカイブは、-o
オプションで指示されない限り、
標準出力に送られる。
shar
には様々な機能があるので、
shar ファイルの作成や shar
の「賢さ
(smartness)」の指定は、非常に柔軟に行うことができる。
アーカイブは、「簡潔
(vanilla)」にも詳細にもできる。
オプション
オプションには、-
で始まる 1
文字のバージョンと、
--
で始まる長いバージョンがある。
--help, --version, --no-i18n,
--print-text-domain-dir は例外で、
短いバージョンがない。
長いオプションに必須の引き数は、短いオプションでも必須である。
オプションはどのような順番でも与えることができる。
互いに依存しているオプションもある。たとえば、
-l や -L オプションを使う場合、-o オプションが必要である。
-a オプションを使う場合、-n オプションが必要である。
下記の -V オプションも参照すること。
ファイルの選択:
- -p
--intermix-type
- 指定位置に依存するパラメーターオプションの使用を許す。
-B, -T, -z, -Z
オプションを
(ファイルリストに)
入れてよい。
このオプションの後ろのファイルはすべて、指示されたモードで処理される。
- -S
--stdin-file-list
- コマンドラインからではなく、標準入力からパックするファイルの一覧を読み込む。
入力は find
コマンドで生成される形式と同じく、
1 行に 1
つのファイル名でなければならない。
パックするファイルの一覧をコマンドラインに書けない場合に、
このオプションは非常に役立つ。たとえば、
find . -type f -print | sort | shar -S -Z -L50 -o /tmp/big
-p
が指定された場合、
-B, -T, -z, -Z
オプションを
標準入力に入れることができる
(行はファイル名で区切られる)。
標準入力の行数、ファイル名、オプションは最大
1024
を越えてはならない。
- -n name
--archive-name=name
- shar
ファイルのヘッダーにアーカイブ名を入れる。
-a
オプションを参照すること。
- -s who@where
--submitter=who@where
- 自動的に決定される作成者名を上書きする。
- -a
--net-headers
- 次のようなヘッダーを自動生成する。
Submitted-by: who@where
Archive-name: <name>/part##
<name> は -n
オプションで指示しなければならない。
name に '/'
が含まれている場合、"/part"
は使われない。つまり、
-n xyzzy の場合:
xyzzy/part01
xyzzy/part02
-n xyzzy/patch の場合:
xyzzy/patch01
xyzzy/patch02
-n xyzzy/patch01. の場合:
xyzzy/patch01.01
xyzzy/patch01.02
-
- who@where
がデフォルトでは不適切な場合、-s
オプションを使って明示的に宣言できる。
who@where は本来 `whoami`@`uname`
で作られる。
- -c --cut-mark
- shar ファイルを cut line
で始める。'Cut here'
と書かれた行が、
各出力ファイルの先頭に置かれる。
ファイルの格納法の選択:
- -M
--mixed-uuencode
- 混合モード。ファイルがテキストなのかバイナリなのかを決定し、
正しくアーカイブを作る
(デフォルトである)。
バイナリであるとわかったファイルは、パックする前に
uuencode される
(ネットワーク上の多くの人に、uuencode
の使用は煙たがられる)。
- -T
--text-files
- すべてのファイルをテキストとして扱う。
- -B --uuencode
- すべてのファイルをバイナリとして扱い、パックする前に
uuencode する。
このオプションは、アーカイブのサイズを増大させる。
受信者は、ファイルを取り出すために
uudecode
を持っていなければならない
(ネットワーク上の多くの人に、uuencode
の使用は煙たがられる)。
- -z --gzip
- パックする前に、すべてのファイルを
gzip して uuencode する。
受信者は、ファイルを取り出すために
uudecode と gzip
を持っていなければならない
(ネットワーク上の多くの人に、uuencode
と gzip の
使用は煙たがられる)。
- -g LEVEL
--level-for-gzip=LEVEL
- 圧縮するとき、'-LEVEL' を
gzip
のパラメーターとして使う。
デフォルトは 9
である。 -g
オプションは、デフォルトで
-z
オプションをオンにする。
- -Z --compress
- パックする前に、すべてのファイルを
compress して uuencode する。
受信者は、ファイルを取り出すために
uudecode と compress
を持っていなければならない
(ネットワーク上の多くの人に、uuencode
と compress の
使用は煙たがられる)。
-C
オプションは、-Z
と同義であるが、推奨されない。
- -b BITS
--bits-per-code=BITS
- 圧縮するとき、'-bBITS' を
compress
のパラメーターとして使う。
-B
オプションは、デフォルトで
-Z
オプションをオンにする。
デフォルトの値は 12
である。
何種類かの shar
ファイルの作成:
- -V
--vanilla-operation
- unshar をする環境に sed と echo
だけがあれば良いような、
「簡潔な (vanilla)」shar
ファイルを生成する。
さらに、-x
オプションを使わないときは、
"if test"
をサポートしなければならない。
-V
オプションは、"network
cop" (または、"brown shirt"
(訳註:やたらと検閲したがる人))
が
不快に感じるオプションを暗黙のうちに不可にする。
しかし、-B, -z, -Z,
-p, -M
オプションと同時に指定されると、警告を発する
(これらのオプションは、unshar
をする環境に uudecode, gzip, compress
を必要とする)。
- -P
--no-piping
- shar ファイル (の展開)
にパイプではなく一時ファイルを使う。
- -x
--no-check-existing
- チェックせずに、既に存在するファイルを上書きする。
-x も -X
も指定されない場合は、
アーカイブからファイルを取り出すときに、
既に存在するファイルをチェックして上書きしない。
ファイルを取り出すとき、
sh archive -c
-
- というように、-c
がスクリプトへの引き数として渡されると、
既に存在するファイルが無条件に上書きされる。
- -X
--query-user
- ファイルを取り出すとき、ファイルの上書きをユーザーに対話的に尋ねる。
(ネットワーク上に送信する
shar
ファイルに使ってはならない)。
- -m
--no-timestamp
- アーカイブからファイルを取り出すときに
'touch'
コマンドを生成しない。
ファイル修正日時は復元されない。
- -Q
--quiet-unshar
- 詳細出力をしない。
ファイルを取り出すときに出力されるコメントをアーカイブに含めない。
- -f --basename
- パスを考慮せず、ファイル名だけで復元をする。
このオプションはファイル名だけが使われるようにする。
shar
ファイルが複数のディレクトリから作られる場合に役立つ。
ディレクトリ名が shar
に渡される場合、 -f
オプションが指定されているかどうかに関係なく、
そのディレクトリ以下の階層は復元されることに注意すること。
国際化:
- --no-i18n
- 国際化されたシェルアーカイブを作らず、デフォルトの英語メッセージを使う。
shar は通常、
アーカイブからファイルを取り出すときに
(環境変数 LANG/LC_MESSAGES
で決定される)
その人の好みの言語で
メッセージを出力することができるアーカイブを作る。
ファイルを取り出すとき、その人の言語のメッセージファイルがない場合は、
メッセージは英語になる。
- --print-text-domain-dir
- shar
がいろいろな言語のメッセージファイルを見つけるための
ディレクトリを表示し、すぐに終了する。
例
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
にディレクトリを渡すときは、
出力ファイルをそのディレクトリ
(もしくはそのサブディレクトリ)
に
置かないように注意すること。
-B, -z, -Z, 特に -M
を使うと、
ファイル数に応じてアーカイブプロセスが非常に遅くなる。
-X
オプションを使うと、多くの
unshar プロセスで
\[u9593]違いなく
問題を引き起こす shar
ファイルが作られる。
この機能を使うのは、合意の取れた集団内で受け渡されるアーカイブのみにすること。
もちろん、-X は Usenet
に発信される
シェルアーカイブのためのものではない。
-B, -z, -Z
をネットワーク上の
shar
ファイルに使うと、
非常に非難されるだろう。
-m と -F
を使わない場合も、時々苦情を言われるだろう。
返り値
不正なオプション・矛盾するオプション、
一般でないファイル・見つからないファイル・アクセスできないファイル、
(有り得ない)
メモリ割り当ての失敗、に対するエラーメッセージ。
著者
shar と unshar
プログラムは多くの著者の協同作品である。
多くの人々が、問題の報告・いろいろな改良の示唆・実際のコードの提供に
貢献してくれた。
これらの人々は sharutils
ディストリビューションの
THANKS
というファイルにリストされている。