web-dev-qa-db-ja.com

Unixの解凍は失敗しますが、Macアーカイブユーティリティは機能します

HPCで抽出できないように見える拡張子が.Zipのファイルがたくさんあります。

$ unzip RowlandMetaG_part1.Zip
Archive:  RowlandMetaG_part1.Zip
warning [RowlandMetaG_part1.Zip]:  13082642473 extra bytes at beginning or within zipfile
  (attempting to process anyway)
error [RowlandMetaG_part1.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ファイル自体のサイズは17377631766バイトです。

ただし、ファイルをMacにダウンロードしてダブルクリックすると、アーカイブユーティリティアプリでファイルを解凍できます(ファイルには約200個のgzip圧縮ファイルが含まれています)。

ファイルを生成した場所は言う:

ファイルは、Windowsを実行しているローカルラボPCでここに圧縮され、Dropboxにアップロードされます。ほとんどの人は問題なく、多くの人がLinux wgetコマンドを使用して、自分のサーバーに直接リンクをダウンロードできます。 、次にそこで解凍します(Linuxユーティリティは通常PCで圧縮されたファイルを処理できます)。

ファイルがDropboxからのものであるという事実に関連があるかどうかはわかりませんが、curl -LOを使用してダウンロードしました(wgetも試しました-これは何も変更しません)。ファイルが表示されますファイル名の最後に?dl=1を付けます。そうは言っても、私がdropboxから私のMacにダウンロードするとき、unzipは同じエラーで失敗します。

私の質問-これをサーバー上で解凍する方法はありますか? Archive Utility.appと同じことを実行するソフトウェア、または使用する解凍プロトコルを決定する他の方法?

編集:コメントに基づく:いくつかの追加情報:

$ file RowlandMetaG_part1.Zip
RowlandMetaG_part3.Zip: Zip archive data, at least v2.0 to extract
$ Zip --version
Copyright (c) 1990-2008 Info-Zip - Type 'Zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-Zip.

また、tarを試しましたが、成功しませんでした。

$ tar -xvf RowlandMetaG_part1.Zip
tar: This does not look like a tar archive
tar: Skipping to next header
tar: Archive contains `l@\022\t1\fjp\024uP\020' where numeric off_t value expected
tar: Archive contains `\024\311\032b\234\254\006\031' where numeric mode_t value expected
tar: Archive contains `\312\005hЈ\2138vÃ\032p' where numeric time_t value expected
# etc...

そして、私はこのようなディレクトリにがらくたになります:

$ ls
???MK??%b???mv?}??????@*??TZ?S?? ??????+??}n>,!???ӟw~?i?(??5?#?ʳ??z0?[?Ed?@?쑱??lT?d???A??T???H??
,??Y??:???'w,??+?ԌU??Wwxm???e~??ZJ]y??ˤ??4?SX?=y$Ʌ{N\?P}x~~?T?3????y?????'
3
kevbonham

ファイルが非常に大きいため、Zipはそれを処理できません(2Gbで最大になります)。代わりに、jarを使用できます。

$ jar xvf RowlandMetaG_part1.Zip
inflated: RowlandMetaG_part1/296E-7-26-17-O_S23_L001_R1_001.fastq.gz
# etc...
3
kevbonham

ファイルは「.Zip」で終わりますが、Zipファイルではない可能性があります。

fileユーティリティを使用して、これがZipファイルであるかどうかを確認できます(同時に、実際のファイル形式を判別できます)。

file RowlandMetaG_part1.Zip

ファイル形式が決定したら、適切なツールを使用してアーカイブを解除できます。

4
Marcelo

同じ問題に遭遇しましたが、まだ解決できませんでした。もしそうなら、私はこの答えを更新します。

ただし、いくつかのことをまっすぐに設定するには:

OPはファイルがZipファイルであると信じることができます。

Linuxの解凍ツールにあると思われる「問題」は、ファイルの最後に中央ディレクトリがないが、代わりに順番に解凍する必要があることであり、Linuxツールはそれを実行できないようです。

理論的には、Zipツールは、アーカイブを順番にスキャンし、そこから新しいZipファイルを作成する-FFオプションを使用して、これを修正できるはずです。ただし、これは大きな(> 4GB)zipでは機能しないことが判明しました-最後に中央ディレクトリがない、さらに別の読み取り不可能なZipファイルが作成されます。

背景: [〜#〜] pkzip [〜#〜] アーカイブ形式では、各アーカイブアイテムに関する情報が2つの場所に保存されます。各圧縮ストリームの前に1回(長さ情報は必須ですが、正しくない)そして最後にすべての保存されたアイテムのリストの最後に、これは一種のオプションです(まあ、標準の定義では常に1つあるはずですが、最初のエントリを通過することでフォールバックも可能です、AppleのZipツールは明らかにそうします)。

問題をさらに分析した後、問題は次のとおりだと思います。

  • 詳細はわかりませんが、Zipファイルはzipのわずかに変更されたバージョンであるdittoコマンドによって作成されました。
  • 問題のZipファイルはZip64形式を使用していません。
  • 大きすぎるファイルのローカルファイルヘッダーに無効なサイズ(2 ^ 32-1)が含まれています。これが解凍ツールを混乱させるものです。
  • ローカルファイルヘッダーのCRC値はゼロです。
  • Appleのアーカイブユーティリティは、ローカルヘッダーの誤ったファイルサイズを無視し、代わりにストリームが終了を通知するまでストリームを解凍するため、このファイルを解凍できます(圧縮されたgzipストリームにはストリーム終了マーカーがあります)。
0

多分tarユーティリティでそれを抽出してみてください

tar xvf <file-name>

たぶん、このリンクは関連しているかもしれません:

https://Apple.stackexchange.com/questions/208139/how-to-deal-with-unzip-error-on-a-large-file-in-osx

0
mk_gocs