最近研究プロジェクトの作業で60個くらいのzipファイル(解凍すると全部で400GBくらい)を解凍する機会があった。
Windows標準の展開では、なぜかすごく遅くて時間がかかる上に、各ファイルごとに、上書きをどうするかなどを途中で質問してくるのでほったらかしにできない。
そこで、調べたところpowershellをコマンドプロンプトからcallして次のような技が使えるらしい。
call powershell -command "Expand-Archive myzip.zip"
これをやってみたが、ファイルの上書き時にエラーが出るのと、CRCエラーが出るファイルを無視せず、エラーで止まってしまうことが分かった。
じゃあ、とpythonの組み込みパッケージ、shutilを使ってみても、やはりCRCエラーが出た時点で止まってしまうことが判明。
shutil.unpack_archive('archive_shutil.zip', 'dir_out')
この問題は圧縮時のチェックサムの計算ミスあるいは64bitと32bitに起因するらしく、圧縮からやり直すのが正解らしいが、そうもいかない。
ということでいろいろと調べてみると7-zipを使え、という記事を見つけた。
7-zipはGUIベースのアプリケーションではあるが、
- 複数のzipファイルの一発解凍が可能。
- 上書き許可などの選択は最初に一回やればあとは全ファイルに適用
- CRCエラーのファイルを報告してくれるが、解凍は行われ、止まらない。
という素晴らしいものだった。開発者さんに感謝。