unzip -l、zipinfo、rubyzip、と標準入力

zip ファイルの格納ファイルの一覧、というか、それっぽいの一覧やら思ってるファイルが入ってるかどうか見たい。それで、zipファイル標準入力から取れないかな。

ファイル一覧ならまずは

unzip -l file[.zip] [list]

[list] にファイル名とか、ワイルドカード適宜。
いいんだけど、zipファイルの情報とか該当ファイル数とかのヘッダフッダが付き、各行にもサイズや日時が入ってるの、参考になるけど、ちょっと余計に思うこともある。

ファイル名だけなら

zipinfo -1 file[.zip] [list]

とか、「-1」なしだと前項同様の各行のサイズ日時とかもうちょっと詳しく。
いずれも他のオプションもいりいろあるので参考に。

そしてどちらにしても、このへんのコマンド系では、zipファイルは引数に指定する、標準入力からは読めない。

zipinfo -1 /dev/stdin [list] < file[.zip]

とすれば、リダイレクトから取ってくることはできるが、標準入力からは取れたなかった。それは僕のシェルの扱いが分かってないのかな。

というわけで、「rubyzip」を使います、手元環境で「gem list rubyzip」すると入ってたんだけど、標準添付のジェムだっけ、そうじゃなければジェムインストールしましょう。そして

cat file[.zip] | ruby -r zip -e 'Zip::File.open_buffer(ARGF.read).glob("**/*<何か>.txt").map{_1.name.+("\n")}.join.display'

ジェム名 rubyzip だけど、「-r zip」なの注意、あとは #glob のワイルドカードRuby の Dir
class Dir (Ruby 3.1 リファレンスマニュアル) のを参考に。