はじめに
こんな悩みを持っていませんか?
「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
としてカレントディレクトリに保存されます。
(圧縮したファイル名をコマンドで指定したい場合は、$1
やshift
を使えば実装できます。ただ今回は使い方を簡単にしたかったので、ファイル名は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
でファイルを圧縮する時のオプションを毎回調べている」
「ファイルを圧縮したはいいけど、圧縮率を瞬時に確認できない」
これらの悩みとはもうおさらばできたはずです!やったね!