tarコマンドで”zフラグを付ける”、”ハイフンを付けない”のはおっさんだそうです

Bash

はじめに

今日は小ネタで。

一時期Twitterでも話題に上がっていたそうですが、 tar コマンドの使い方でおっさんかどうか分かるそうです。

きっかけは2年ぐらい前に同僚と雑談をしていたときに言われたことでした。

tarコマンドでアーカイブを展開するとき、zフラグやjフラグを付与するのはおっさんだけだよ
...って、Twitterで言われてた

いつか突っ込んで調べようと思っていたのですが、そのまま置きっぱなしになってはや2年。
時間ができたので調べてみることにしました。

検証環境

$ head -n 2 /etc/os-release
PRETTY_NAME="Ubuntu Impish Indri (development branch)"
NAME="Ubuntu"

$ bash -version | head -n 1
GNU bash, version 5.1.8(1)-release (x86_64-pc-linux-gnu)

$ tar --version | head -n 2
tar (GNU tar) 1.34
Copyright (C) 2021 Free Software Foundation, Inc.

tarコマンドでgzip圧縮済みファイルを展開してみる

圧縮形式で一番使われるのは gzip でしょう。
速度、圧縮率のいずれのバランスもよく、デファクトスタンダードだと思っています。

tar コマンドで gzip 圧縮を使ったアーカイブ、展開を行う際には z オプションを使用します。

まずはtarコマンドでgzip圧縮済みのファイルを作成します。
その後、そのファイルをいくつかの方法で展開してみます。

# ディレクトリを作成し
$ mkdir test

# 適当なファイルを2つ突っ込む
$ echo hello > test/1.txt
$ echo world > test/2.txt

# test.tar.gz ファイルを作成
$ tar zcf test.tar.gz test

# ゴミ掃除
$ rm -rf test

$ ls -l
total 4
-rw-r--r-- 1 root root 174 Jul 17 22:35 test.tar.gz

さて、ここから展開をしてみたいと思います。

zオプション有り展開

それでは作成したファイルを展開します。
僕はいつも zxf というオプションを呪文のように入力して展開しています。
( v オプションを付けたり付けなかったりは状況によって変えています。 )

$ tar zxf test.tar.gz

$ ls
test  test.tar.gz

$ ls -l test
total 8
-rw-r--r-- 1 root root 6 Jul 17 22:34 1.txt
-rw-r--r-- 1 root root 6 Jul 17 22:35 2.txt

展開されました。
いつもどおり問題なしです。

zオプション無しの展開

では今度はzオプション無しでの展開をしてみます。

# まずはゴミ掃除
$ rm -rf test

$ tar xf test.tar.gz

$ ls -l
total 4
drwxr-xr-x 4 root root 128 Jul 17 22:35 test
-rw-r--r-- 1 root root 174 Jul 17 22:35 test.tar.gz

$ ls -l test
total 8
-rw-r--r-- 1 root root 6 Jul 17 22:34 1.txt
-rw-r--r-- 1 root root 6 Jul 17 22:35 2.txt

オプション無しでも展開されましたね。

最近は z オプション無しでも展開できる

ということで、最近は z オプション無しでも展開できるそうです。

どのバージョンから z オプション無しでの自動判定が入ったのかはわかりませんが、思ったよりも随分昔に導入されていたのかもしれません。

おっさんは - オプションを付けない

もう一点。
- オプションを付けないのはおっさんだそうです。

試しに - オプションを付けて実行してみます。

# まずはゴミ掃除
$ rm -rf test

# 展開
$ tar -xf test.tar.gz

# 確認してみる
$ ls -l
total 4
drwxr-xr-x 4 root root 128 Jul 17 22:35 test
-rw-r--r-- 1 root root 174 Jul 17 22:35 test.tar.gz

$ ls -l test
total 8
-rw-r--r-- 1 root root 6 Jul 17 22:34 1.txt
-rw-r--r-- 1 root root 6 Jul 17 22:35 2.txt

問題なく動作しました。

ひとこと

プルリクエストが上がったときに zオプションがついてなかった り、 ハイフンが付与されていた りしても 「最近の若いもんは!慣習的にzxfでハイフン無しやろ!」 みたいな指定をしていたら恥をかくかもしれません。

tar コマンドに限らず、「昔はこうだった」「一般的には」のような指摘、マウント取りたがりおじさんで恥ずかしいことになると肝に銘じたいところです。

Bash