次のようなコマンドを使用して、自分のコンピューター(Mac OS X)に一連のZipファイルを作成しました。
Zip -r bigdirectory.Zip bigdirectory
次に、これらのZipファイルをどこかに保存し、元のディレクトリを削除しました。
ここで、Zipファイルを抽出しようとすると、次のようなエラーが発生します。
$ unzip -l bigdirectory.Zip
Archive: bigdirectory.Zip
warning [bigdirectory.Zip]: 5162376229 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [bigdirectory.Zip]: start of central directory not found;
zipfile corrupt.
(please check that you have transferred or created the zipfile in the
appropriate BINARY mode and that you have compiled UnZip properly)
それ以来、Zipが特定のサイズ(4ギガ)を超えるファイルを処理できないことが原因である可能性があることを発見しました。少なくとも私はどこかでそれを読んだ。
しかし、なぜZipコマンドでこれらのファイルを作成できるのでしょうか。問題のZipファイルは9457464293バイトで、これにより、エラーがまったく発生せずに、このようなファイルをさらに多く作成できました。
したがって、これらのファイルを作成できることは明らかです。
私のファイルが失われないことを本当に望みます。私は自分のレッスンを学びました。将来、元のファイルを削除する前にアーカイブを確認します。また、おそらくtar/gzipのような別のファイル形式も使用します。
今のところ、私は何ができますか?ファイルが本当に必要です。
一部の人々は、私のunzip
ツールが十分な大きさのファイルをサポートしていないと示唆しています(組み込みのOS X Zip
とunzip
を使用したため、これは奇妙です)。とにかく、私はunzip
から新しいhomebrew
をインストールしましたが、なんと、今度は別のエラーが発生します。
$ unzip -t bigdirectory.Zip
testing: bigdirectory/1.JPG OK
testing: bigdirectory/2.JPG OK
testing: bigdiretoryy/3.JPG OK
testing: bigdirectory/4.JPG OK
:
:
file #289: bad zipfile offset (local header sig): 4294967295
(attempting to re-compensate)
file #289: bad zipfile offset (local header sig): 4294967295
file #290: bad zipfile offset (local header sig): 9457343448
file #291: bad zipfile offset (local header sig): 9457343448
file #292: bad zipfile offset (local header sig): 9457343448
file #293: bad zipfile offset (local header sig): 9457343448
:
:
これらのファイルを戻す必要があるので、これは本当に心配です。そして、システムZip
ツールを使用してこのZipファイルを作成しても、間違いなくエラーはありませんでした。実際、私はこれらを同時にいくつか作成しましたが、現在はすべて同じ問題を示しています。
ファイルが本当に破損している場合、どうすれば修正できますか?
または、破損していない場合、どのように抽出しますか?
6未満の解凍は一見失敗するようです。使用してください
jar -xf <zipfile>
Javaがインストールされている場合、またはファイルを書き出す前に別の解凍を行う場合。
参照: https://serverfault.com/questions/235139/how-to-unzip-files-bigger-than-4gb
ハードディスクのフォーマットを実行する前に、12GBのディレクトリをバックアップするときに同様の問題がありました。おかしなことに、私はあなたと同じコマンドを使用しました。
私は周りを読み、実行するための提案を見つけました:
Zip -F
そして
Zip -FF
ファイルの修正を試みます。
残念ながら、これらは機能せず、エラーが発生しました。
さらに調べてみたところ、dittoコマンドが見つかり、元の(そのままの)Zipファイルに対して完全に機能しました。
ditto -x -k original-file.Zip dst-directory
-x to extract an archive
-k Specifies it to be a PKZip archive instead of the default CPIO
このコマンドを使用した後、すべてのファイルを正常に抽出しました。
7z x
をお試しくださいLinuxのunzip %x
でも、4GBを超える.Zip
ファイルでonly DEFLATED entries can have EXT descriptor
エラーが発生し、同じ問題が発生しました。
コマンド7z x
でも、私の問題はすべて解決しました。
ただし、コマンド7z x
は、現在のディレクトリをルートとするパスを持つすべてのファイルを抽出します。オプション-o
では、出力ディレクトリを指定できます。
巨大なサイズ(〜7GB)のZipファイルをunzip
しようとしたときも、まったく同じ問題に直面しました。 Zipファイルをサーバーにコピーしているときにエラーが発生しないことを確信しました。 (rsync
で再確認しました)。
状況に応じて、解決策は次のとおりです。
1)ローカルマシンでこれを実行している場合は、Zipファイルを右クリックしてExtract Here
、これは任意のサイズの(.Zip)ファイルで機能します。
2)Zipファイルがリモートサーバーにある場合は、最初にsftp
(sftp://[email protected]
)。その後、ディレクトリに移動し、(1)で行ったのと同じことを繰り返します。つまり、Zipファイルを右クリックして展開します。
最善の解決策ではないかもしれませんが、それはそれを行う1つの方法です。
組み込みのmacOSアーカイブユーティリティ(Finderで何かを選択して[ファイル]-> [<item>]に移動するときに使用されるデフォルト)は、アーカイブ内のファイルのサイズが4ギガバイトを超える場合、または破損したアーカイブを作成します。アーカイブ自体のサイズが4ギガバイトを超えているか、Zip64拡張形式を使用していないため、65536以上を単一のZipに圧縮しようとしています。
技術的には、圧縮されたファイルのすべてのデータはまだアーカイブにありますが、Zipのコンテンツの高速リストを可能にするヘッダーは壊れています。そのようなzipは、他のツールを使用するときに操作するのに苦労する可能性があります(同じバージョンのmacOSでコマンドラインunzip
ツールを使用してそのようなZipをテストする場合でも、_invalid compressed data to inflate
_/bad zipfile offset (local header sig)
)しかし、アーカイブユーティリティはそれらを正常に抽出できます(標準を無視し、最初にファイルのチェック/リストを試みないツールも機能する可能性があります)。
これは https://Apple.stackexchange.com/questions/221020/large-Zip-files-created-in-os-x-cannot-be-opened-in-windows で言及されており、 "Apple Archive Utility(and ditto)and very large Zip archives" 2009のブログ記事(現在は機能しなくなったSpringyユーティリティ)で十分にカバーされています。 7-Zipの人々はApple破損したzipの問題を作成するツール も知っています。