3.3.3 古いオプション形式
私たちの知るかぎり、GNU版かどうかにかかわらず、すべてのtarプログラムが「古いオプション」(old options)をサポートしています。最初の引数が-で始まらない場合、その引数はオプション文字を指定するものと見なします。GNU tarが古い形式をサポートするのは、歴史的な理由だけでなく、多くの人が慣れ親しんでいるためでもあります。最初の引数がハイフンで始まらなければ、短い形式ではなく古い形式を使うと宣言したことになります。古いオプションの解釈方法は、短い形式とは異なります。
短いオプションと同じく、古いオプションも1文字です。ただし、文字の間に空白を入れず、前にハイフンも付けず、必ず1つにまとめて書きます。この文字列は、コマンドライン上で、tarというプログラム名と空白の直後に置かなければなりません。他の場所には置けません。古いオプションの文字は、対応する短いオプションと同じです。たとえば、tは-t、したがって--listと同じです。tar cvなら、操作-cに加えて、オプション-vを指定します。
引数を必要とするオプションをコマンドと一緒に指定した場合、それらの引数は、オプションと同じ順序で後に続けます。したがって、前の例は、古い形式なら次のようにも書けます。
$ tar cvbf 20 /dev/rmt0
ここでは、20が-bの引数で、/dev/rmt0が-fの引数です。
古い形式の構文では、オプション文字と対応する引数を結び付けにくく、混乱することがよくあります。たとえば、tar cvbf 20 /dev/rmt0では、20が-bの引数、/dev/rmt0が-fの引数であり、-vには対応する引数がありません。tar -c -v -b 20 -f /dev/rmt0のように短いオプションを使うだけでも、各引数が対応するオプションの隣に来るため、分かりやすくなります。
古いオプション引数の文字を並べ替える場合は、対応する引数も適切に並べ替えてください。
この古い記述方法は、経験豊かなユーザーさえ驚かせることがあります。たとえば、次の2つのコマンドです。
tar cfz archive.tar.gz file tar -cfz archive.tar.gz file
この2つは大きく異なります。最初の例は、archive.tar.gzをfの値として使い、zオプションも認識します。しかし2つ目の例は、zをfの値として使います。おそらく、意図した動作ではないでしょう。
2つ目の例はいろいろな方法で修正できます。次の記述は、いずれも同じ意味になります。
tar -czf archive.tar.gz file tar -cf archive.tar.gz -z file tar cf archive.tar.gz -z file