結論
- 4GB以上のZIPファイルは作成しない、もらわない。
- tarや7zなどでもらう。
- もらってしまった場合は相手のOSを確認する。
- Linux系、mac系なら7zで解凍できる。
- Windows系はエンコード問題が発生するので、unarを利用する。(全部unarでもいい)
背景というか何が起きたのか?
顧客から大容量のローカルに保存してあるファイルをいただきました。
元の容量が数百GBということと、コロナの影響で物理的にわたしづらいということもあり、顧客側できりの良いところで分割してファイルサーバにアップロードしてもらったのですが、そのファイルたちが1ファイル2~10GBのZIPだったというのが、ことの初まりです。
ローカルのPCで数百GBを捌けないので、ubuntuサーバーで解凍しようとしたけどいろいろな問題にはまりました。
1. 4GBを越えたZIPファイルはUNZIPできない。
unzipもとい裏のライブラリの影響で、4GBを越えるものは下記のようなエラーとなり解凍できません。
びっくりですね。
Archive: xyz.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
この問題だけであれば、7zをインストールすることで解決できます。
sudo apt install p7zip-full
7zでは解凍はe,xのどちらかでできますが、eはフォルダー構造を無視して解凍するので普通ならxで解凍します。
7z x -o destdir xyz.zip
2. SHIFT-JISが文字化け
Windowsの日本語ユーザーの殆どの方はをSHIFT-JIS標準で使われています。ZIPでは文字コードを変換したりしないため、SJISのファイル名はそのままSJISとして保存されています。
最近のLinuxやMacはUTF8ですので、解凍時に文字化けした状態となります。
ググると色々な解法(LANGの設定を変更すればいいとかconvnv使うとか)が出てきますが、どれを試しても上手くいきませんでした。
いろいろググった結果、unarで解凍で一発解決になりました。
インストールは下記で可能です
sudo apt install unar
解凍はシンプルに
unar xyz.zip
でできます。フォルダーが存在していると上書きかどうか聞いてきますので、面倒な場合は-f
を利用するといいです。
最後に
色々あるとおもいますが、ZIPつかわない方が幸せになれそうです。