Linux

【gzip】ファイルの圧縮/解凍 ~圧縮したからといってサイズが小さくなるとは限らない?~[Linux]

はじめに

USBなどの外部メモリにデータを移行する際、データを圧縮して渡せると、よりたくさんのデータを一度に移すことができますよね。特に、普段は見返さない写真や動画などは、普段使っているPCから移行しておきたかったりします。
そこで、データを圧縮するコマンドgzipについて勉強したので簡単にまとめておきます。

圧縮・解凍

圧縮する際には、gzipコマンドを使用し、
解凍する際には、gunzipコマンド、もしくはdオプションつきのgzipコマンドを使用します。

1. 流れで確認

中身がaaaaaaaaaaaaaaaaaaaaの文字列であるa.txtファイルに対して処理をしていきます。

ファイルを圧縮

$ gzip a.txt

サイズを確認

lオプションで圧縮されたファイルの情報(サイズ、圧縮率、ファイル名)を表示することができます。

$ gzip -l a.txt
  compressed uncompressed  ratio uncompressed_name
          30           21 -42.9% a.txt 

結果をテーブルで表すと次のようになります。

サイズ(圧縮後) 30
サイズ(圧縮前) 21
圧縮率 -42.9%
ファイル名(圧縮前) a.txt

逆にファイルサイズが大きくなってしまっています。圧縮率もマイナスとなっています。こちらに関しては、後ほど確認します。

ファイルを解凍

圧縮後のファイルはファイル名に.gz拡張子がついています。

$ gzip -d a.txt.gz

2. 圧縮ファイルのサイズが小さくなっていない件

画像ファイルと動画ファイルに関しても圧縮を行い、サイズについて確認してみました。

画像ファイルに関して

$ gzip a.jpeg

$ gzip -l a.jpeg.gz
  compressed uncompressed  ratio uncompressed_name
     6329598      6347555   0.2% a.jpeg

動画ファイルに関して

$ gzip a.mov

$ gzip -l a.mov
  compressed uncompressed  ratio uncompressed_name
  2014167723   2014467159   0.0% a.mov

わずかにファイルサイズが小さくなっていますが、これでは圧縮する意味はあるのかと考えものです。。

結論

圧縮に向かないファイルがあるため、対象ファイルを圧縮するかどうかは見極める必要があります。
また、ペイントなどのBMP(ビットマップ)ファイルなどが圧縮には適している(圧縮効率が良い)ようです。

補足

ファイルのサイズはバイト単位で出力されますが、容量が大きいファイルはサイズが掴みにくいということがあります。その際、hオプションlオプションとつけることで、単位をつけてわかりやすく出力することができるので、確認します。

$ ls -hl a.txt
-rw-r--r--  1 takuyanin  staff    21B Jan  9 21:50 a.txt
$ ls -hl a.jpeg
-rw-r--r--  1 takuyanin  staff   6.1M Sep  9 15:55 a.jpeg
$ ls -hl a.MP4
-rw-r--r--@ 1 takuyanin  staff   1.9G Sep  9 16:24 a.mov

このように、B(バイト)M(メガ)G(ギガ)といった単位とともにファイルサイズが確認できます。

便利ですね。

おわりに

個人的に、もっとも外部メモリに移したかった画像ファイル、動画ファイルに関してはあまり効果がないということがわかりました。
少し残念な結果となりましたが勉強になったのでよしとします。笑

こちらの記事が役に立ったという方は、いいね、よろしくお願いします(^^)
また、takuyaninのマイページにlinuxコマンドなどに関していくつか記事をまとめてますので、よければご参考ください。