Landscape トップページ | < 前の日 2005-11-07 2005-11-08 次の日 2005-11-10 >

Landscape - エンジニアのメモ 2005-11-08

7zip をコマンドラインから使って圧縮


* 7zip をコマンドラインから使って圧縮

この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [ソフトウェア]

7zip はファイル圧縮ツール。7z, zip, cab, rar, arj, lzh, chm, gzip, bzip2, tar, cpio, rpm, deb の各形式に対応している。ライセンスは LGPL。

7-Zip ようこそ7-Zipウェブサイトへ!
http://www.7-zip.org/ja/

- 7zip で作った zip ファイルは互換性もあるし圧縮率も高い

7zip は独自形式の 7z 形式ばかり注目されがちだが、一般的な zip や bzip2 や gzip や lzh の圧縮もできる。また、7zip で作成した圧縮ファイルは、一般的なファイル圧縮ツールで圧縮したものよりもサイズが小さくなるという特徴を持つ。もちろん、一般的なファイル圧縮ツールで生成した圧縮ファイルと互換性がある。他のツールよりも圧縮に時間をかけて、より圧縮率が高くなるようにしているとのこと。

つまり、「圧縮率は重視するが、作成した圧縮ファイルは一般的なファイル展開・解凍ツールで展開できるようにしておきたい」という場合は、7zip を使って zip 形式や bzip2 形式で圧縮ファイルを作成すればよい。

- コマンドラインから 7zip を使う

7zip の配布パッケージには GUI 版だけでなくコマンドライン版も同梱されている。今回はこれを cygwin のコマンドラインから使う。目的は例によって以下の2つの記事で書いた gzip 圧縮した RSS ファイルや index.html ファイルを得るため。

2005-09-14 「Content Negotiation でリクエストに応じて gzip 圧縮ファイルを返す」
2005-09-15 「mod_rewrite でリクエストに応じて gzip 圧縮ファイルを返す」

ちなみに、シェル統合の機能があるので Windows のエクスプローラの右クリックから圧縮したいファイルを指定して 7zip を起動するのが一般的な使い方だ。

- 7zip.exe と Gnu gzip コマンドの圧縮率と所要時間の差

それぞれ time コマンドをかませて、圧縮所要時間を計測。

7zip のコマンドラインオプションの意味は以下の通り。
-tgzip は圧縮形式に gzip を指定。
-mx は 圧縮レベルに最高の9を指定。
-mfb は「Deflate エンコーダに渡す Fast Bytes の値」の指定。大きいほど圧縮率が上がるが、その分遅くなる。128を指定。

$ time /cygdrive/c/Program\ Files/7-Zip/7z.exe a -tgzip -mx=9 -mfb=128 cl-full.xml.7zip.gz cl-full.xml

7-Zip 4.23  Copyright (c) 1999-2005 Igor Pavlov  2005-06-29

Scanning

Updating archive cl-full.xml.7zip.gz

Compressing  cl-full.xml

Everything is Ok

real    0m5.470s
user    0m0.015s
sys    0m0.015s

$ gzip -V
gzip 1.3.5
(2002-09-30)

$ time gzip -9 -c cl-full.xml >cl-full.xml.gzip.gz

real    0m0.552s
user    0m0.546s
sys    0m0.030s

7zip は5秒ほど、GNU gzip は0.6秒ほど。所要時間約十倍。ちなみに実行環境は 2005-06-18 の「Athlon64 マシンを自作する」で作った Athlon64 3000+ (Venice コア)、メモリ 2GB のマシン。

サイズは 7zip で作ったものの方が40KB ほど小さくなっている。約4%。これだけだと差は小さい気がする。

-rw----r--  1 landscape なし 4191059 Nov  8 22:24 cl-full.xml
-rw----r--  1 landscape なし  912885 Nov  8 22:27 cl-full.xml.7zip.gz
-rw----r--  1 landscape なし  952781 Nov  8 22:28 cl-full.xml.gzip.gz

- スクリプトに組み込み

できた。2005-10-25 の「一定以上のサイズを持つファイルを gzip 圧縮するシェルスクリプト」に以下を追加した。

cd $HOME/public_html/log.sonic64/
seven_zip_target="cl-full.xml index.html cl.xml"
for file in $seven_zip_target; do
  echo "compressing with 7zip $file"
  /cygdrive/c/Program\ Files/7-Zip/7z.exe a -tgzip -mx=9 -mfb=128 $file.gz $file
  touch -r $file $file.gz
  chmod 604 $file.gz
done

最初に cd している理由は、パスの処理を一ディレクトリ内で完結させるため。cygwin から 一般のコマンドを呼び出しているときは、そのコマンドは / から始まる cygwin のファイルシステムのパスを解釈してくれない。これを解決するには、カレントディレクトリ内ですべてを実行するのが手っ取り早い。

すべての記事の見出し (全1029件)
全カテゴリの一覧と記事の数
カテゴリごとに記事をまとめ読みできます。記事の表題だけを見たい場合は、すべての記事の見出し (カテゴリ別表示) へ。

直近30日分の記事
2007-04-23 (Mon)
2007-03-07 (Wed)
2007-02-27 (Tue)
2007-01-17 (Wed)
2007-01-15 (Mon)
2007-01-14 (Sun)
2007-01-08 (Mon)
2006-12-01 (Fri)
2006-11-22 (Wed)
2006-11-20 (Mon)
2006-11-19 (Sun)
2006-09-30 (Sat)
2006-08-29 (Tue)
2006-08-04 (Fri)
2006-07-27 (Thu)
2006-07-23 (Sun)
2006-07-17 (Mon)
2006-07-10 (Mon)
2006-07-06 (Thu)
2006-07-03 (Mon)
2006-06-29 (Thu)
2006-06-28 (Wed)
2006-06-27 (Tue)
2006-06-25 (Sun)
2006-06-19 (Mon)
2006-06-18 (Sun)
2006-06-15 (Thu)
2006-06-11 (Sun)
2006-06-01 (Thu)
2006-05-30 (Tue)
プロファイル
斎藤 宏明。エンジニアです。宇都宮市に住んでいます。
リンク
RSS
スポンサードリンク
Powered by
さくらインターネット

© 斎藤 宏明 Saito Hiroaki Gmail Address
Landscape - エンジニアのメモ http://sonic64.com/
Landscape はランドスケープと読みます。
ひらがなだと らんどすけーぷ です。