京橋のバイオインフォマティシャンの日常

南国のビーチパラソルの下で、Rプログラムを打ってる日常を求めて、、Daily Life of Bioinformatician in Kyobashi of Osaka

【LINUX/Macの基本コマンド⑧】圧縮ファイルを解凍せずに、ファイル一覧やファイルの中身を閲覧するコマンドについて【zip/gz編】

はじめに

Linux/Mac環境では圧縮されたファイルの中身を閲覧するときに、 わざわざ、ファイル解凍をしなくても、中身を確認することができます。

ただし、圧縮形式によっては、 複数ファイルを一緒に圧縮できる形式(zipやtar.gzなど)であるのか、 1つずつのファイルごとに圧縮する形式(gzなど)であるのか が変わってきます。よって、ファイルの中身の表示され方も変わってきます。

圧縮ファイルを解凍すると、一時的にでも大きなファイルが生成されるので、 解凍しなくて確認できれば、その余分な生成を避けることができます。 知っていると、とても便利な方法です。

それでは、圧縮ファイルを解凍せずに、中身を見る方法を紹介していきます。

実行環境

M1 Mac環境で実行しています。

macOS Big Sur (バージョン11.5.2)
MacBook Air (M1, 2020)
チップ Apple M1
メモリ 16GB

まずは、ファイルを圧縮する

まずは、適当なテキストファイルを圧縮(zip/gz)します。

#ファイル内表示
cat test.txt

#hoge 1
#hoge 2
#hoge 3
#hoge 4
#hoge 5
#hoge 6
#hoge 7
#hoge 8
#hoge 9
#hoge 10

#zip圧縮: -rオプションで、ファイル名を指定する
zip -r test.zip test.txt

#gz圧縮: -kオプションで元ファイルを残す
gzip -k test.txt

#詳細表示
ls -lh

#-rw-r--r--@ 1 sas  staff    81B  1 18 18:10 test.txt
#-rw-r--r--@ 1 sas  staff    64B  1 18 18:10 test.txt.gz
#-rw-r--r--  1 sas  staff   203B  1 18 18:32 test.zip

zipとgzipコマンドを用いて、ファイル圧縮を行いました。 次に、これらのファイルを使って、解凍せず表示というのをやってみます。

解凍せずに、zipファイルに含まれるファイル一覧を表示する

まずは、zip圧縮ファイルを使って実行します。 ここでは、zipinfoあるいはunzip -Zコマンドを使うことで、 圧縮されたファイルに含まれるファイル一覧が表示できます。・

#ZIPファイル内の情報の表示
zipinfo -lht test.zip
#Archive:  test.zip
#Zip file size: 203 bytes, number of entries: 1
#-rw-r--r--  3.0 unx       81 tx       37 defN 23-Jan-18 18:10 test.txt
#1 file, 81 bytes uncompressed, 37 bytes compressed:  54.3%

#unzip実行
unzip -Z test.zip
#Archive:  test.zip
#Zip file size: 203 bytes, number of entries: 1
#-rw-r--r--  3.0 unx       81 tx defN 23-Jan-18 18:10 test.txt
#1 file, 81 bytes uncompressed, 37 bytes compressed:  54.3%

両コマンドで、表示結果は同じで、圧縮率まで表示されます。 今回の圧縮率は、54.3%となっていますね。

解凍せずに、gzファイルの中身を閲覧する

次に、gz圧縮ファイルを使ってやってみます。 gz圧縮形式だと、必ず1つずつファイル圧縮されているので、 この実行でファイルの中身(テキスト文)まで表示されます。

コマンドとしては、zcatgzip -dcあるいはgunzip -cを使います。

zcatは、「gzip」コマンドなどで圧縮された圧縮ファイルの中身を表示するときの専用コマンドですね。 ただ、Macの場合、zcatの代わりに、gzcatを使うみたいです。

それでは、実行してみます。

#(LINUX)圧縮ファイルの中身の表示
zcat test.txt.gz

#(Mac)圧縮ファイルの中身の表示
gzcat test.txt.gz
#hoge 1
#hoge 2
#hoge 3
#hoge 4
#hoge 5
#hoge 6
#hoge 7
#hoge 8
#hoge 9
#hoge 10

#gzipでの実行方法
gzip -dc test.txt.gz
#(省略)

#gunzipでの実行方法
gunzip -c test.txt.gz
#(省略)

gzipの-dcオプションは、展開と標準出力を意味します。 また、gunzipの-cオプションは、標準出力のみを実行します。

当然ながら、3つの方法とも、同じ出力結果となりますので、省略してます。

解凍せずに、gzファイルの中身を部分的に閲覧する

続いて、ファイル内をすべて表示されると冗長なとき、 ファイルの一部分のみを表示させたくなります。

そこで、実行の際にheadやtailをパイプで組み合わせることで、 先頭から数行とか、最終行から数行とかを部分を切り取って表示することができます。

例えば、gz圧縮されたファイル内の先頭から4行のみを表示したい場合には、以下のように実行します。

#(Mac)gzcat実行
gzcat test.txt.gz | head -n 4
#hoge 1
#hoge 2
#hoge 3
#hoge 4

#gzip実行
gzip -dc test.txt.gz | head -n 4

#gunzip実行
gunzip -c test.txt.gz | head -n 4

ちなみに、gz圧縮されたファイル内の最終行までの4行を表示したい場合には、以下と実行します。

#(Mac)gzcat実行
gzcat test.txt.gz | tail -n 4
#hoge 7
#hoge 8
#hoge 9
#hoge 10

#gzip実行
gzip -dc test.txt.gz | tail -n 4

#gunzip実行
gunzip -c test.txt.gz | tail -n 4

「先頭から4行」、「最終行までの4行」というかたちで、それぞれ出力できました。

まとめ 

このやり方を知れば、zipやgz形式の圧縮ファイルが現れても、 中身が見えて、安心ですね。。www

参考資料

qiita.com

atmarkit.itmedia.co.jp