gzipコマンド : gzip形式に圧縮/展開する

Linuxコマンド(ファイル/ディレクトリ管理)
2023-10-01
ヒーローイメージ

目次
  1. コマンド概要
  2. コマンド書式
  3. コマンド使用例

コマンド概要

  • gzipコマンドは指定したファイルをgzip形式アーカイブに圧縮するコマンドです。

    • 圧縮されたファイルは、ファイルの所有権、パーミッションを変更せず、.gzの拡張子が付加された(圧縮された)ファイルに置き換わります。
    • ファイルを指定しない場合、もしくは-を指定した場合、標準入力を圧縮します。
    • 引数に複数のファイルを指定するとそれぞれのファイルを個別に圧縮します。
    Note
    複数ファイルを1つにまとめて圧縮したい場合tarを使ってファイルをまとめた後に圧縮することで実現できます。

コマンド書式

コマンド書式
gzip [オプション] [ファイル名 ... ]
オプション 説明

-c
--stdout

標準出力に結果を出力する。元ファイルはそのまま残る。

-d
--decompress

圧縮されたファイルを解凍する。

-f
--force

圧縮後ファイルと同じファイル名が存在する場合は上書きして圧縮する。

-l
--list

圧縮されたファイルのサイズ、圧縮されなかったファイルのサイズ、圧縮率、圧縮前ファイル名、を表示する。

-r
--recursive

指定したディレクトリ配下のファイルを(サブディレクトリに格納されているファイルも含め)圧縮する。

-S 文字列
--suffix 文字列

圧縮ファイルの拡張子(=文字列)を指定する。「.」も含めて指定する。

-v
--verbose

コマンドの実行詳細を出力する。

-数値
--fast / --best

1~9(=数値)を指定する。数値が高いほど処理速度は落ちるが圧縮率が高くなる。

コマンド使用例

動作確認環境
項目 補足
OS Amazon Linux 2
シェル bash 4.2.46
コマンド gzip 1.5
PS1 [\u@\h \W]$ プロンプト表示形式は [ユーザ名@ホスト名 カレントディレクトリ名]ユーザ権限
PS2 > 継続行のプロンプト表示形式

gzip : ファイル圧縮

  • gzipコマンドをオプションなしで利用すると指定したファイルをgzip圧縮することができます。

    コマンド例
    // テストファイル作成
    [username@hostname ~]$ for i in `seq 1 3`
    > do
    >   ls -l /usr/bin/ > "tempfile$i"
    > done
    
    // ファイル状態(圧縮前)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 49K Oct  1 00:00 tempfile1
    -rw-r--r-- 1 username groupname 49K Oct  1 00:00 tempfile2
    -rw-r--r-- 1 username groupname 49K Oct  1 00:00 tempfile3
    
    // ファイル圧縮実行
    [username@hostname ~]$ gzip *
    
    // ファイル状態(圧縮後)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile1.gz
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile2.gz
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile3.gz
    
    

gzip -c : 圧縮結果を標準出力

  • -cオプションを使用すると圧縮結果が標準出力されます。

    コマンド例
    // テストファイル作成
    [username@hostname ~]$ ls -l /usr/bin > tempfile1
    
    
    // ファイル状態(圧縮前)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 49K Oct  1 00:00 tempfile1
    
    // 圧縮結果を標準出力をファイルに書き出す ★1
    [username@hostname ~]$ gzip -c tempfile1 > tempfile2.gz
    
    // ファイル状態(圧縮後)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname  49K Oct  1 00:00 tempfile1
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile2.gz
    
    // ファイル圧縮実行(オプションなし) ★2
    [username@hostname ~]$ gzip tempfile1
    
    
    // ファイル状態(圧縮後)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile1.gz
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile2.gz
    
    // ★1 と ★2 の結果に差分なし(差分出力なし)
    [username@hostname ~]$ diff tempfile1.gz tempfile2.gz
    
    
    

gzip -d : ファイル解凍

  • -dオプションを使用するとgzip圧縮されたファイルを解凍することができます。

    コマンド例
    // テストファイル作成
    [username@hostname ~]$ ls -l /usr/bin > tempfile1 ; gzip tempfile1
    
    
    // ファイル状態(解凍前)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile1.gz
    
    // ファイル解凍実行
    [username@hostname ~]$ gzip -d tempfile1.gz
    
    // ファイル状態(解凍後)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 49K Oct  1 00:00 tempfile1
    
    

gzip -f : 強制上書きして圧縮

  • -fオプションを使用すると圧縮後に同名ファイルが存在しても強制上書きします。

    コマンド例
    // テストファイル作成
    [username@hostname ~]$ ls -l /usr/bin > tempfile1
    [username@hostname ~]$ ls -l /usr/sbin | gzip -c > tempfile1.gz
    
    // ファイル状態(圧縮前)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname  49K Oct  1 00:00 tempfile1
    -rw-r--r-- 1 username groupname 5.6K Oct  1 00:00 tempfile1.gz
    
    // ファイル圧縮(オプションなし)
    // →同名ファイルが存在するため上書き確認される。今回は n で上書きしない
    [username@hostname ~]$ gzip tempfile1
    gzip: tempfile1.gz already exists; do you wish to overwrite (y or n)? n
            not overwritten
    
    // ファイル圧縮(同名ファイルが存在するが強制上書き)
    [username@hostname ~]$ gzip -f tempfile1
    // ファイル状態(圧縮後)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile1.gz
    
    

gzip -l : 圧縮ファイル情報表示

  • -lオプションを使用すると圧縮ファイル情報を表示することができます。

    コマンド例
    // テストファイル作成
    [username@hostname ~]$ ls -l /usr/bin > tempfile1 ; gzip tempfile1
    [username@hostname ~]$ ls -l /usr/sbin > tempfile2 ; gzip tempfile2
    
    // ファイル状態
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile1.gz
    -rw-r--r-- 1 username groupname 5.6K Oct  1 00:00 tempfile2.gz
    
    // 圧縮ファイル情報表示
    [username@hostname ~]$ gzip -l tempfile*        compressed        uncompressed  ratio uncompressed_name
                9154               49679  81.6% tempfile1
                5690               31571  82.1% tempfile2
                14844               81250  81.8% (totals)
    
    

gzip -r : ディレクトリ配下を圧縮

  • -rオプションを使用すると指定したディレクトリ配下のファイルを(サブディレクトリに格納されているファイルも含め)圧縮します。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ mkdir -p tempdir1/tempdir2
    [username@hostname ~]$ ls -l /usr/bin > tempdir1/tempfile1
    [username@hostname ~]$ ls -l /usr/sbin > tempdir1/tempdir2/tempfile2
    
    // ファイル状態(圧縮前)
    [username@hostname ~]$ find tempdir1/ -type f
    tempdir1/tempdir2/tempfile2
    tempdir1/tempfile1
    
    // ディレクトリ配下ファイル圧縮(サブディレクトリ配下含む)
    [username@hostname ~]$ gzip -r tempdir1
    
    // ファイル状態(圧縮後)
    [username@hostname ~]$ find tempdir1/ -type f
    tempdir1/tempdir2/tempfile2.gz
    tempdir1/tempfile1.gz
    
    

gzip -S : 圧縮ファイル拡張子指定

  • -Sオプションを使用すると圧縮ファイルの拡張子を指定することができます(.も含めて指定します)。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ ls -l /usr/bin > tempfile1
    
    
    // ファイル状態(圧縮前)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 49K Oct  1 00:00 tempfile1
    
    // 拡張子を指定して圧縮実行
    [username@hostname ~]$ gzip -S .hoge tempfile1
    
    // ファイル状態(圧縮後)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile1.hoge
    
    

gzip -v : 実行詳細を表示して圧縮

  • -vオプションを使用するとコマンドの実行詳細を出力します。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ ls -l /usr/bin > tempfile1
    
    
    // ファイル状態(圧縮前)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 49K Oct  1 00:00 tempfile1
    
    // 実行詳細を表示して圧縮実行
    [username@hostname ~]$ gzip -v tempfile1
    tempfile1:       81.6% -- replaced with tempfile1.gz
    
    // ファイル状態(圧縮後)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 9.0K Oct  1 00:00 tempfile1.gz
    

gzip -数値 : 圧縮率を指定

  • -数値を指定すると圧縮率を指定して圧縮することができます。数値が高いほど処理速度は落ちますが圧縮率が高くなります。

    コマンド例
    // テスト用ファイル作成
    [username@hostname ~]$ ls -l /usr/bin > tempfile1
    
    
    // ファイル状態確認(圧縮前)
    [username@hostname ~]$ ls -hl tempfile*
    -rw-r--r-- 1 username groupname 49679 Oct  1 00:00 tempfile1
    
    // 圧縮率を指定して圧縮する
    [username@hostname ~]$ for i in `seq 1 5`
    > do
    >   gzip -c -$i tempfile1 > tempfile1-$i.gz> done
    
    // ファイル状態確認(圧縮後)
    [username@hostname ~]$ ls -l tempfile*
    -rw-r--r-- 1 username groupname 49679 Oct  1 00:00 tempfile1
    -rw-r--r-- 1 username groupname 10893 Oct  1 00:00 tempfile1-1.gz
    -rw-r--r-- 1 username groupname 10656 Oct  1 00:00 tempfile1-2.gz
    -rw-r--r-- 1 username groupname 10382 Oct  1 00:00 tempfile1-3.gz
    -rw-r--r-- 1 username groupname  9715 Oct  1 00:00 tempfile1-4.gz
    -rw-r--r-- 1 username groupname  9268 Oct  1 00:00 tempfile1-5.gz
    
    

コメント


Palette Codeなるべく丁寧にプログラミング関連技術を解説するサイト