カタカタブログ

SIerで働くITエンジニアがカタカタした記録を残す技術ブログ。Java, Oracle Database, Linuxが中心です。たまに数学やデータ分析なども。

Linuxでzipファイルの中身を展開せずに見るにはlessがおすすめ

(※2015/3/10追記 本記事の続きの検証記事を書きました)
lessでzipファイルの中身が見えるわけ 〜LESSOPENとlesspipe.sh〜 - カタカタブログ

Linux上でzipファイルの中身を見たいとき、いちいち解凍・展開するのは面倒。そんなときはlessコマンドを使うのが一番てっとり早くておすすめ。lessコマンドの引数に普通にzipファイルを渡すと、なんとそのまま中身が表示される。

lessでzipファイルの中身を見る

$ less test.zip
Archive: test.zip
Zip file size: 460 bytes, number of entries: 3
-rw-r--r-- 3.0 unx    0 bx stor 15-Mar-04 09:08 test1.txt
-rw-r--r-- 3.0 unx    0 bx stor 15-Mar-04 09:08 test2.txt
-rw-r--r-- 3.0 unx    0 bx stor 15-Mar-04 09:08 test3.txt
3 files, 0 bytes uncompressed, 0 bytes compressed: 0.0%

※実際はlessなのでページャが動いている。
lessだと中身のファイル数が大量であってもlessのページング機能が使えるので便利。

unzip -Z(zipinfo)で展開せずに見る

unzipに-Zオプションとかzipinfoでもいけるけど、当然ページャは使えない。テキストファイルに対するcatみたいなものと割りきって使う。

$ unzip -Z test.zip
Archive: test.zip
Zip file size: 460 bytes, number of entries: 3
-rw-r--r-- 3.0 unx    0 bx stor 15-Mar-04 09:08 test1.txt
-rw-r--r-- 3.0 unx    0 bx stor 15-Mar-04 09:08 test2.txt
-rw-r--r-- 3.0 unx    0 bx stor 15-Mar-04 09:08 test3.txt
3 files, 0 bytes uncompressed, 0 bytes compressed: 0.0%

$ zipinfo test.zip
Archive: test.zip
Zip file size: 460 bytes, number of entries: 3
-rw-r--r-- 3.0 unx 0 bx stor 15-Mar-04 09:08 test1.txt
-rw-r--r-- 3.0 unx 0 bx stor 15-Mar-04 09:08 test2.txt
-rw-r--r-- 3.0 unx 0 bx stor 15-Mar-04 09:08 test3.txt
3 files, 0 bytes uncompressed, 0 bytes compressed: 0.0%

zip形式の拡張子zip以外の圧縮ファイルを見る

lessは拡張子がjarのものもちゃんとzipと認識し、中身を見ることができる。

$ less commons-lang-2.3.jar
Archive: commons-lang-2.3.jar
Zip file size: 245274 bytes, number of entries: 140
drwxr-xr-x 2.0 unx    0 bx stor 07-Feb-09 20:05 META-INF/
-rw-r--r-- 2.0 unx   491 b- defN 07-Feb-09 20:05 META-INF/MANIFEST.MF
drwxr-xr-x 2.0 unx    0 b- stor 07-Feb-09 20:00 org/
drwxr-xr-x 2.0 unx    0 b- stor 07-Feb-09 20:00 org/apache/
drwxr-xr-x 2.0 unx    0 b- stor 07-Feb-09 20:00 org/apache/commons/
drwxr-xr-x 2.0 unx    0 b- stor 07-Feb-09 20:01 org/apache/commons/lang/
(・・・略)

ただしwarやearファイルとかはだめなよう。バイナリファイル扱いされ、正しく見ることができない。

$ less sample.ear
"sample.ear" may be a binary file. See it anyway?
PK^C^D^T^@^H^H^H^@<F2><85>cF^@^@^@^@^@^@^@^@^@^@^@^@^T^@^@^@META-INF/MANIFEST.MF<F3>M<CC><CB>LK-.<D1>^MK-*<CE><CC>?R0<D4>3<E0><E5><E2>
(・・・略)

どうやらlessが拡張子を見て判断しているようで、単純に拡張子変更で見れるようになる。

$ mv sample.ear sample.zip
$ less sample.zip
Archive: sample.zip
Zip file size: 15591336 bytes, number of entries: 32
-rw----   2.0 fat    25 bl defN 15-Mar-03 16:47 META-INF/MANIFEST.MF
-rw----   2.0 fat 3590042 bl defN 15-Mar-03 16:47 sample_web.war
-rw----   2.0 fat   6215 bl defN 15-Mar-03 16:47 sample_ejb.jar
-rw----   2.0 fat    0 bl defN 15-Mar-03 15:24 META-INF/
-rw----   2.0 fat   607 bl defN 15-Mar-03 15:31 META-INF/application.xml
-rw----   2.0 fat    0 bl defN 15-Mar-03 15:24 lib/
(・・・略)

ちなみにunzip -Zだとearファイルでも見れるよう。

$ unzip -Z sample.ear
Archive: sample.ear
Zip file size: 15591336 bytes, number of entries: 32
-rw----   2.0 fat    25 bl defN 15-Mar-03 16:47 META-INF/MANIFEST.MF
-rw----   2.0 fat 3590042 bl defN 15-Mar-03 16:47 sample_web.war
-rw----   2.0 fat   6215 bl defN 15-Mar-03 16:47 sample_ejb.jar
-rw----   2.0 fat    0 bl defN 15-Mar-03 15:24 META-INF/
-rw----   2.0 fat   607 bl defN 15-Mar-03 15:31 META-INF/application.xml
-rw----   2.0 fat    0 bl defN 15-Mar-03 15:24 lib/
(・・・略)

lessは通常はテキストファイルを見るものだけど、zipの中身を見るときは特別な挙動をして見れるような処理がされているので、拡張子で特別扱いするファイルの種別を識別しているためと思われる。一方unzip -Zは当然zip形式のファイルである前提なので、拡張子に関係なく見れるものと思われる。

まとめ

zip形式のファイルを見るにはlessが最も手軽で便利だと思う。ファイルの中身を見るのに、テキストだろうがzipだろうが意識せずに常に"less"!と思っておけば良いので。unzipだとオプションが覚えづらく、間違えた時に展開されたり元のzipファイルに影響を与えかねないので、やや注意が必要になる。まだzipinfoの方が安全か。

ただし、zip形式で圧縮されているが拡張子がzipやjarでないファイルの場合は、リネームして拡張子をzipにしてlessで見る必要があるので、そこが面倒ならunzip -Zやzipinfoにパイプでlessに渡す方がよいかもしれない。

関連記事