LoginSignup
6
2

ファイル圧縮を効率化!ファイル圧縮&圧縮率を表示する関数

Posted at

はじめに

こんな悩みを持っていませんか?

tarでファイルを圧縮する時のオプションを毎回調べている」

手持ちのPCの場合はファイルの圧縮はGUIでもできますが、サーバーでの操作はGUIでの作業が困難です。よってコマンドでファイル圧縮をする機会が生じます。筆者は毎回tarコマンドのオプションを調べていました。

「ファイルを圧縮したはいいけど、圧縮率を瞬時に確認できない」

ファイルを本当に圧縮できたのか、ファイルの圧縮によってどのくらいサイズが軽減されたか気になると思います。
その都度毎回コマンドを打つorあるいはコマンドを覚えていない場合は調べる必要があるので、小さなストレスが溜まります。

今回は二つの悩みを解決する自作のzsh関数を紹介します。

内容

ファイル圧縮&圧縮率を表示するzsh関数

ファイル圧縮&圧縮率を表示するzshの関数compress_fileは以下です。

## 使い方: %compress_file file1 file2 
compress_file () {
    # 圧縮されたファイルの名前をローカル変数に設定
    local compressed_file="files.tar.gz"

    # 元のサイズをキロバイト単位で取得し、バイト単位に変換
    local original_size=$(du -c -k "$@" | grep total$ | awk '{print $1}')

    # 元のサイズを表示
    echo "Original size: $original_size KB"

    # ファイルを圧縮
    tar -czf "$compressed_file" "$@"

    # 圧縮後のサイズをキロバイト単位で取得し、バイト単位に変換
    local compressed_size=$(du -k "$compressed_file" | awk '{print $1}')

    # 圧縮後のサイズを表示
    echo "Compressed size: $compressed_size KB"

    # 圧縮率を計算
    local compression_ratio=$(echo "scale=2; 100 - ($compressed_size / $original_size * 100)" | bc)

    # 圧縮率を表示
    echo "Compression ratio: $compression_ratio%"
}

(1)圧縮したいファイル群のサイズを計算して保持しておき(2)tarで圧縮して(3)圧縮後のファイルサイズを計算して圧縮率を出しています。

圧縮したファイルはfiles.tar.gzとしてカレントディレクトリに保存されます。

(圧縮したファイル名をコマンドで指定したい場合は、$1shiftを使えば実装できます。ただ今回は使い方を簡単にしたかったので、ファイル名はfiles.tar.gz固定としています。)

使い方

上記の関数compress_fileの内容を~/.zshrcに関数を記載し、source ~/.zshrcで読み込めばいつでも使えます。

compress_fileの使い方の例は以下です。

% ls
file1.txt file2.txt
% compress_file file1.txt file2.txt
Original size: 8 KB
Compressed size: 4 KB
Compression ratio: 50.00%
% ls
file1.txt file2.txt files.tar.gz #files.tar.gzが新規作成

おわりに

tarでファイルを圧縮する時のオプションを毎回調べている」

「ファイルを圧縮したはいいけど、圧縮率を瞬時に確認できない」

これらの悩みとはもうおさらばできたはずです!やったね!

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2