tarコマンドの短縮オプションの個人的な覚え方

2021.05.06

はじめに

UNIX系のアーカイブファイルを操作するコマンドtarを使う時に、オプションで混乱しないようにTipsをまとめました。 基本的にはman tarでマニュアルを読めば問題ないです。

自分はtarを使う際に頻出する一文字のオプションコマンドの種類や順番がよくわからず混乱してました。 何も見ずにアーカイブファイルを扱えるようにオプションを整理してみました。

例: tarballを作りたい時
tar -czf? tar -fzc? tar -xfc?

以下ではBSD版のver3.3.2の場合を取り扱います。

ベースを作る

基礎となるオプションは二種類です。 一つ目がモードを決めるオプション、二つ目が対象ファイルを決めるオプションです。 これらを決めてから追加のオプションを決めましょう。

1. 目的をはっきりさせる

tarコマンドを使う時はおそらく以下の三つの場合だと思います。 tarにはそれぞれに対応するモードがあり、次のようなオプションです。

目的 オプション 備考
アーカイブの作成 -c --createの省略
アーカイブの編集 -u, -r --update,--appendの省略
アーカイブの展開 -x,-t --extarct,--listの省略

ここでは説明の簡略化のために触れませんが、まだ他にもオプションがあるのでman tarで確認してみてください。

アーカイブの展開の-tオプションは標準出力にアーカイブの中身の一覧を出力してくれるので、中のファイルを知りたい時に役立ちます。

2. ファイルを決める

-fオプションを追加して扱うアーカイブファイルを指定しましょう。

例: ファイルを追加したい

$ tar -r -f sample_archive.tar new_file

tarコマンドは-fオプションなしでも動きますが、指定しない場合はテープドライブを読み込もうとしてしまいます。 アーカイブファイルを扱いたい人は-fオプションを付けましょう。

追加オプション

以下では個人的によく使うオプションをまとめておきました。 これらの追加オプションは原則として-fの前に入れましょう。

取り扱ったファイルを知りたい

-v, --verboseオプションをつけると処理したファイルが順に出力されます。 意図したファイルを処理しているか確認したいときに便利です。

作成したアーカイブを圧縮したい

圧縮は-a, --auto-compressで行うことができます。これは-fで指定された対象ファイルの拡張子から自動で圧縮方式を決めてくれます。 展開する場合は自動で判別してくれるのでこのオプションは必要ありません。 自分で指定することもでき、その場合はGNU Zipなら-zなどオプションが用意されてるので確認してみてください。

短縮オプションはまとめて指定できる

他のUNIX系のコマンドでもありますが、短縮オプション(-一つから始まるアルファベット一文字のオプション)は一度に指定できます。

例:ファイルを圧縮したい

$ tar -czf sample_archive.tar files
$ tar -c -z -f sample_archive.tar files

ただ、引数をとるような短縮オプションは連続するオプション列の最後にする必要があります。 例えば-fオプションは対象ファイルを決めるオプションで引数としてアーカイブファイルを取ります。 なので次のようなオプションの指定はできません。

$ tar -xfv sample_archive
  tar: Error opening archive: Failed to open 'v'

このとき-v-fオプションの引数として理解されてしまいます。 以下のように-fを最後に持ってくると、予期した挙動になります。

$ tar -xvf sample_archive

ちなみに、以下のように-なしで指定することもできますが、これは Old Option Style と呼ばれるそうです。

$ tar xvf sample_archive

コマンド例

振り返りとしてコマンドの例をいくつか挙げておきます。

GNU zipで圧縮したアーカイブファイルを作る

$ tar -caf sample_archive.tar.gz sample_file0 sample_file1

zipで圧縮されたアーカイブを展開する

$ tar -xf sample_archive.zip

まとめ

  • よくわからない文字列は短縮オプションの集合体
  • tarにはモードがある
  • ファイルが対象の時は-fオプションを最後にもってくる

参考資料

Wikipedia tar
Old Option Style(GNU版ですがおそらくBSD系でも同じっぽい?)