zgrep で zip のなかみ grep できるってガセじゃね?

zip ファイルの中身に対して grep したいなと Google 検索してみたら、zgrep が使えるとの情報が複数確認できました。

ほんとに?

zgrep とはナニモノ?

 

# rpm -qf /usr/bin/zgrep
gzip-1.5-8.el7.x86_64

 

gzip パッケージに含まれています。

 

# file /usr/bin/zgrep
/usr/bin/zgrep: POSIX shell script, ASCII text executable

 

中身はシェルスクリプトです。見てみましょう。

引数で与えられたファイルを gzip -cdfq に渡してますね。どうみても gzip ですありがとうございました。

しかしなぜコレで zgrep が zip 内も検索できるという話になってしまったのでしょうか。

man gzip すると、「gzip は zip や PKZIP で使われている Lempel-Zivアルゴリズムを使っているよ」とのことですので、gzip に ZIP ファイルを食わせたら最初の圧縮ファイルだけは展開できてしまうんですね。

ですから zip ファイルに複数のファイルが含まれてるものを zgrep で検索したとき、zip 内の最初のファイルだけが検索対象になります。

というわけで zgrep は zip ファイル内全部について grep してくれるわけではないようです。