Linuxでマルチパート(スパン)ZIPを解凍する方法は?


74

400 MBのファイルをWebサーバーにアップロードする必要がありますが、アップロードできるのは200 MBに制限されています。私のホストから、スパンドアーカイブの使用が提案されました。

私は、独自のフォルダ内にテストを作成したにPDFをビュンtest.zip.001.002.003。どうすれば解凍できますか?最初に参加する必要がありますか?

ZIP形式を使用しているのと同じように7zを使用しても満足していることに注意してください。これが結果に何らかの違いをもたらす場合。


これは、限られたソフトウェアがインストールされているWebサーバーでは役に立たないかもしれませんが、私はこのソリューションを他のどこにも見たことがなく、私はそれを使用しています: 、末尾の部分がないか、最後の部分が不完全である、より一般的な場合でも。Jythonから呼び出すので、スクリプトの形式になります。コードは次のとおり
Andrzej Cichocki

回答:


75

最初に参加する必要があります。cat以下の例のように、一般的なLinuxアプリを使用できます。

cat test.zip* > ~/test.zip

これはあなたのすべて連結しますtest.zip.001test.zip.0021より大きい、test.zipファイルに、etcファイルを。その単一のファイルを取得したら、実行することができますunzip test.zip

「Linuxでzipアーカイブを作成、分割、結合、抽出する方法」が役立つ場合があります。


1
OK、私はそれが好きです...進歩...しかし、私は本当にここでLinux n00bです。私x*はファイル名だと思いますか?そして~/hugefileディレクトリですか?チルダ記号の目的は何ですか?非常に基本的な質問だと思われる質問をしてすみません。
ティム

ファイルを分割するときは、x_のようなプレフィックスを使用する必要があります(例:x_split1、x_split2、...; Windowsのサフィックスfile.001、file.002 ...など)、チルダはホームディレクトリを表します。〜/ hugefileは/ home / tim / hugefileと同じです。ファイルを分割しましたか?分割ファイルの名前は何ですか?
fromnaboo

1
私は、問題がでてくるところ、スパンアーカイブはZIPの拡張子を持つ7zipをを使用して、ウィンドウで作成された参照だと思うので、それは自動として作成しTEST.zip.001TEST.zip.002そしてTEST.zip.003分割が非常に異なっていることを意味します。LinuxをVMWareに投げて、ここでファイルを作成する方が簡単なように見え始めており、少なくとも1つのOSしか扱っていません。任意のファイルタイプでSPLITコマンドを使用できますか?すなわち、画像、オーディオ映画など?
ティム

はい、splitコマンドはどのファイルでも機能します。apt-getでp7zipをインストールするdebianにp7zipをインストールするか、fedoraにyumをインストールする
fromnaboo

1
7za x archiveアーカイブにディレクトリ構造が含まれている場合は、おそらくより優れています。
slm

38

Linux unzipユーティリティは、マルチパートzipを実際にはサポートしていません。マニュアルから:

マルチパートアーカイブは、zipとの組み合わせを除き、まだサポートされていません。(すべての部分を順番に連結し、連結されたアーカイブを「修正」するために(zip -F zip 2.xの場合)またはzip -FF(zip 3.xの場合)実行する必要があります。また、zip 3.0以降を組み合わせることができますを使用して、マルチパート(分割)アーカイブを結合した単一ファイルアーカイブにしzip -s- inarchive -O outarchiveます。詳細については、zip 3のマニュアルページ参照してください。

したがって、最初にピースを連結してから、結果を修復する必要があります。ワイルドカードが任意の文字シーケンスを表す場所でcat test.zip.*呼び出されるすべてのファイルを連結します。ファイルは辞書式順序で列挙されます。これは、先行ゼロのおかげで数値順序と同じです。出力をファイルに送ります。test.zip.**>test.ziptest.zip

cat test.zip.* >test.zip
zip -FF test.zip --out test-full.zip
unzip test-full.zip

公式のPkzipユーティリティでマルチパートzipを作成するのではなく、zipファイルを直接分割してピースを作成した場合は、パーツを結合するだけです。

cat test.zip.* >test.zip
unzip test.zip

1
2番目のコマンドはzip -FF test.zip --out test-full.zipである必要があります--- outコマンドなしでエラーが表示されます
アルビン

3
私にとっては、最初のマルチパートファイルFFをポイントすればアプローチは機能しましたが、必要zipありませんcatでした。
ジャニスエルメリス14

1
@JānisElmerisが既に述べたように、アーカイブを使用zip -FFする前にアーカイブを連結する必要はありません。
ルネ

24
7z x archive.zip.001

それは自動的に残りを見つけます


1
これはとても奇妙です...これが機能するには、まずすべてのZIPファイル(.zXXと.zip)を.zip.xxx(.zipが最後の部分)に名前を変更する必要があります。次に、最初のファイルで7z xを使用できますこれは、連結されたzipに「抽出」され、7zではなくunzipを使用して再び解凍できます。ファイルが正しく解凍されたかどうかは完全にはわかりませんが、少なくとも今回はunzipはCRCエラーについては対応していません。 Linuxでは、ZIPは非常に壊れているので、できる限り避けてください。:(
Energiequant

少なくともcentosについては、7zのインストール方法も説明する必要があります
stiv

20

私はここで答えを見つけました:https : //superuser.com/a/517758/10264

この答えは、Gillesの概念と似ています。つまり、最初にsplitを使用して分割アーカイブを通常のアーカイブに結合し、次にunzipを使用して解凍します。

違いは、-FF私にとってはうまくいかなかったフラグを使用する代わりに、分割せずに分割ファイルを再パックするようにzipに指示するだけです。それが-s 0フラグの意味です。

そのため、まず、分割アーカイブを単一のアーカイブに結合します。

zip -s 0 split-foo.zip --out unsplit-foo.zip

次に、unzipを使用して単一のアーカイブを抽出します。

unzip unsplit-foo.zip

2
これはzip 3.xの正解です
-texasbruce

0

ちょうど別の例。これはbashで3GBのOracleインストーラを分割するのに役立ちました:

echo "<installOracleDB.sh>: Splitting OracleDB installer"
zip /tmp/linuxx64_12201_database.zip --out /tmp/linuxx64_12201_oradb.zip -s 1000m
echo "<installOracleDB.sh>: Merging OracleDB installer"
zip -FF /tmp/linuxx64_12201_oradb.zip --out /tmp/linuxx64_12201_database.zip
echo "<installOracleDB.sh>: Removing temporary files OracleDB installer"
find /tmp -type f -name 'linuxx64_12201_oradb*' -exec rm {} +
echo "<installOracleDB.sh>: Unizipping OracleDB installer"
unzip /tmp/linuxx64_12201_database.zip

これは以前の回答と非常によく似ています。それが何をしているのか、それがすでに投稿されているものとどう違うのかを説明できますか?コメントで返信しないでください。回答を編集して、より明確で完全なものにします。
スコット

こんにちはスコットランド、私はコメントで答えることができればいいのですが、今それをするために少しポイントが必要です。この回答は、UNIXで大きなファイルを分割、マージ、および解凍するためのコマンドの完全なリストを提供します。私の答えを明確にするために、より多くの説明テキストを提供します。お返事ありがとうございます。
-TheHagueCoder

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.