はじめに
UNIX環境ではzip形式のファイルを展開するためにgunzipコマンドが存在します。
$ which gunzip /bin/gunzip
ファイル群がtarで括られ、それをzip形式としていれば問題なくgunzipで展開されるのですが、ファイル群をzip形式にしていると以下のようなエラーとなります。
$ gunzip -d --suffix zip hoge.zip gzip: hoge.zip has more than one entry -- unchanged
本記事では、複数ファイルが含まれている場合でも利用できるunzipコマンドをインストールし、解凍した流れを説明します。
環境情報
- Debian GNU/Linux 9 (stretch)
複数ファイルが格納されたzipを解凍する
方針としてはapt-getでコマンドを落として実行します。
unizpコマンドをインストールする
apt-cacheで検索をかけます。
$ apt-cache search unzip comprez - frontend to many compression programs devscripts - scripts to make the life of a Debian Package maintainer easier ... unzip - De-archiver for .zip files ... libzzip-dev - library providing read access on ZIP-archives - development zziplib-bin - library providing read access on ZIP-archives - binaries
ここにあるunzipを利用します。
$ apt-get install unzip Reading package lists... Done Building dependency tree ... Setting up unzip (6.0-21+deb9u2) ... Processing triggers for man-db (2.7.6.1-2) ...
コマンドのインストールが完了しました。
$ which unzip /usr/bin/unzip
unzipコマンドを利用する
対象のzipファイルを
$ file hoge.zip hoge.zip: Zip archive data, at least v1.0 to extract
unzipで展開します。
UNZIP(1) General Commands Manual UNZIP(1)
NAME
unzip - list, test and extract compressed files in a ZIP archive
オプションなしでコマンドを発行すると以下のように展開した情報が表示されます。
$ unzip hoge.zip Archive: hoge.zip 4ff1f647b4bdcf5d0dd42f9c58f8ee32a958f5dd creating: hoge/ inflating: hoge/a.txt inflating: hoge/b.md inflating: hoge/c.sh
確かに複数ファイルが格納された状態で、ディレクトリとして展開されました。
$ ls hoge a.txt b.md c.sh
終わりに
複数のファイルをzipでまとめられたものをLinux環境に配置すると、gunzipやtarでは解凍できなくて困るケースがあります。
同様の事象でお困りの方が、該当の流れで解決すれば幸いです。