いつもファイルを解凍する時は都度調べてはコピペをしていたので、
最低限必要そうな解凍・圧縮コマンドを覚えることにしました。
(ちょっとzipは無視します。)
結論
以下2つを覚えればどうにかなる。
(-a オプションを使うとファイル名に合わせ自動で圧縮・解凍してくれるとコメントをいただきましたので修正しました。)
圧縮:
tar -acvf xxxx.tar.gz xxxx
解凍(展開):
tar -acvf xxxx.tar.gz
ちなみに-fはファイル名の直前に置かないといけない制約があるので
オプションの順序は-fを一番最後にしたら後は好きにして大丈夫でした。
結論に至ったワケ
よく見る〇〇.gzと〇〇.tar.gzの違いってなに?
〇〇.tar.gz:圧縮された複数のファイルとかディレクトリがまとまってるもの
〇〇.gz:圧縮されてる単一ファイル
単一のファイルをtar.gzファイルとして圧縮できるので〇〇.tar.gzの方だけ解凍・圧縮方法覚えればいいんじゃない?
じゃあ、〇〇.tar.gz、〇〇.tar.bz2、〇〇.tar.xzの違いは?
圧縮方法、圧縮率が違うとのこと。(結局圧縮ファイルには変わりないね。)
ということで
コマンドを調べてみたら全てtarコマンド一つで解決できそう。
しかも解凍と圧縮でcとxでオプションが1個変えるだけでよいという親切設計!
やってみよう
圧縮方法
# tar -zcf test.tar.gz test
日本語訳:tarコマンドでtestディレクトリのgz(-z)をcreate(-c)します。file(-f)名はtest.tar.gz
- 使用オプション
-z(gz):gzファイル
-c(create):圧縮する
-f(file):ファイル名
解凍方法
# tar -zxf test.tar.gz
日本語訳:tarコマンドでfile(-f)名がtest.tar.gz(-z)をextract(-x)します。
-z(gz):gzファイル
-x(extract):解凍(展開)する
-f(file):ファイル名
-vを追加してみる
-v(verbose)は処理したファイルを出力するオプション
# tar -zcvf test.tar.gz test
test/
test/NO1
test/NO2
test/NO3
test/NO4
test/NO5
ちゃんと処理できてるか確認できるのいいね、採用。
-aを使用してみる
-aオプションでコマンド実行をすると自動的にファイル形式を合わせてくれると情報をいただきましたのでやってみます。
# tar -acvf test.tar.gz test
# tar -acvf test.tar.bz2 test
# tar -acvf test.tar.xz test
# ls -ll
total 12
drwxr-xr-x. 2 root root 61 Feb 17 21:02 test
-rw-r--r--. 1 root root 180 Feb 17 21:02 test.tar.bz2
-rw-r--r--. 1 root root 189 Feb 17 21:02 test.tar.gz
-rw-r--r--. 1 root root 220 Feb 17 21:02 test.tar.xz
# file test.tar.gz
test.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 10240
# file test.tar.bz2
test.tar.bz2: bzip2 compressed data, block size = 900k
# file test.tar.xz
test.tar.xz: XZ compressed data
少し見にくいですが、-aを使って拡張子を任意の形式にするとしっかりと-a(auto)で圧縮してくれることが分かりました。
ちなみに
# tar -zcvf test.tar.xz test
test/
test/no1
test/no2
test/no3
test/no4
test/no5
# file test.tar.xz
test.tar.xz: gzip compressed data, from Unix, original size modulo 2^32 10240
本来gzipファイルを指定する-zを使って、xzファイルを作成しようとすると
名前は〇〇.tar.xzなのに中身はgzipで圧縮されるということが起きます。
gz2、xzファイルにしたい場合のオプション
オプション | 意味 |
---|---|
-z | gzip形式 |
-j | bzip2形式 |
-J | xz形式 |
-zはgzだからなんとなく分かるけど、-jと-Jはなんでjなんだ。
(開発者の方がこの記事見てたら理由をコメントに書いてください。)
まとめ
・オプションって英語の頭文字になることが多いからそれを含めて理解したら覚えやすくなった。
・なんで-jと-Jはjなんだ。