最近のtarコマンドは展開時だけでなく、圧縮時もフォーマットを自動判定してくれる

2023-03-27Bash,Linux

はじめに

随分眺めの夏休みでした。ブログ投稿も二週間空いてしまいました。
一度途絶えた習慣をもう一度体に染み込ませるのは骨が折れます。
早くも頭が抵抗して「面倒くさい」気持ちが生まれてしまいました。
気を取り直して。

こちらのエントリを書くきっかけは以前投稿した以下のエントリです。

tarball ファイルを 展開する 際に、
最近は圧縮フォーマットが自動判定されるため、
z (gzip ファイル展開時) やら j (bzip2 ファイル展開時) やら J (xz ファイル展開時)のオプションは指定不要ということでした。

追加で調べてみると、展開時だけでなく 圧縮時 もフォーマット指定が不要ということがわかりました。

検証環境

$ uname -moi
x86_64 MacBookPro16,1 Darwin

$ bash -version | head -n 1
GNU bash, バージョン 5.1.8(1)-release (x86_64-apple-darwin20.3.0)

$ tar --version
tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.

-a オプションを使う

いろんな圧縮フォーマットのファイルを圧縮する際に、 z / j / J その他と使い分けるのは面倒です。
忘れてしまっていたらいちいち調べないといけないのも手間ですね。

そこで便利なのが 「a」オプション
ファイルの拡張子に応じて、自動的に圧縮フォーマットを判断し選択してくれます。

# 圧縮なし
$ tar -acf data.tar data/

# gzip圧縮
$ tar -acf data.tar.gz data/

# bzip2圧縮
$ tar -acf data.tar.bz2 data/

# xz圧縮
$ tar -acf data.tar.xz data/

※上記コマンドは - を付ける必要はないですし、 むしろ - をつけない事のほうが多いと思いますが、以下の記事にあるように若者に習ってつけてみました。

ひとこと

-a オプション、便利で良いですね。
拡張子さえ間違えなければ、拡張子にマッチした圧縮フォーマットが選択されるため間違いは減ります。

-a オプションをつけ忘れるとかえってややこしいことになるので注意!

# 圧縮なし
$ tar -cf data.tar.gz data/

# 拡張子は gz だが、実際には圧縮なしのtarball
$ file data.tar.gz
data.tar.gz: POSIX tar archive (GNU)

2023-03-27Bash,Linux