How to unzip a multipart (spanned) ZIP on Linux?

I need to upload a 400mb file to my web server, but I’m limited to 200mb uploads. My host suggested I use a spanned archive, which I’ve never done on Linux.

I created a test in its own folder, zipping up a PDF into test.zip.001, .002, and .003. How do I go about unzipping it? Do I need to join them first?

Please note that I’d be just as happy using 7z as I am using ZIP formats. If this makes any difference to the outcome.

Asked By: Tim

||

You will need to join them first. You may use the common linux app, cat as in the example below:

cat test.zip* > ~/test.zip

This will concatenate all of your test.zip.001, test.zip.002, etc files into one larger, test.zip file. Once you have that single file, you may run unzip test.zip

“How to create, split, join and extract zip archives in Linux” may help.

Answered By: fromnaboo

The Linux unzip utility doesn’t really support multipart zips. From the manual:

Multi-part archives are not yet supported, except in conjunction with zip. (All parts must be concatenated together in order, and then zip -F (for zip 2.x) or zip -FF (for zip 3.x) must be performed on the concatenated archive in order to “fix” it. Also, zip 3.0 and later can combine multi-part (split) archives into a combined single-file archive using zip -s- inarchive -O outarchive. See the zip 3 manual page for more information.)

So you need to first concatenate the pieces, then repair the result. cat test.zip.* concatenates all the files called test.zip.* where the wildcard * stands for any sequence of characters; the files are enumerated in lexicographic order, which is the same as numerical order thanks to the leadings zeroes. >test.zip directs the output into the file test.zip.

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

If you created the pieces by directly splitting the zip file, as opposed to creating a multi-part zip with the official Pkzip utility, all you need to do is join the parts.

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

I found the answer here: https://superuser.com/a/517758/10264

This answer is similar in concept to that of Gilles, namely first you combine the split archive into a normal archive using split, and then you unpack it using unzip.

The difference is that instead of using the -FF flag, which did not work for me, you just tell zip to repack the split file without splitting. That is what the -s 0 flag means in the manual.

A split archive can also be converted into a single-file archive using a split size of 0: zip -s 0 test.zip -O single.zip

So, first, combine the split archive to a single archive:

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

Then, extract the single archive using unzip:

unzip unsplit-foo.zip

This approach only works for .z01, .z02, …, .zip file structure. If your filenames are .zip.001, .zip.002…, you have rename them first using (e.g.) rename zip.0 z test.zip* with rename.

Answered By: Paul Wagland
7z x archive.zip.001

It will automatically find the rest

Answered By: mist

Just another example. This worked for me in bash to split 3GB oracle installer:

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
Answered By: guicey

I think it’s worth mentioning that the unar command-line tool is able to unZip, unRar, un7zip, unTar etc, including splitted files, with just:

unar first_file

https://directory.fsf.org/wiki/Unar#Details

Answered By: Guariba Som

For a multipart zip coming from a Google Drive download I tried several of the explained methods but didn’t work (well). I could finally do it in a simple way from the terminal:
unzip filename.zip.001
when finished extracting the same with the next part:
unzip filename.zip.002
and so on …

Another option:
7z x filename.zip.001
when finished extracting the same with the next part:
7z x filename.zip.002
and so on …

Answered By: carregul

If you have a large collection of files or just very big files this command assembly is is pretty handy as it gets you a progress bar:

 $ pv files.zip* | cat - > uberFile.zip
 25.0GiB 0:50:24 [8.48MiB/s] [============================================================>] 100%
 $ unzip uberFile.zip

Just used this to combine and extract a 25Gb split archive.

Answered By: Zexelon

The following works for me on Ubuntu 18.04.

  • split the compressed file into multiple archives, each is less than 1024MB
    zip -s 1024m -r target.zip target/
    
  • get the files: target.z01, target.z02, …, target.zip

  • before unzip them, combine them into one whole zip file

    zip -FF target.zip --out target-full.zip
    unzip target-full.zip
    
  • remove all the .z* file

    rm *.z*
    
Answered By: husi253

Note that some of the answers will not work as expected when having more than 10 files, because they will be sorted in the wrong order (alphabetical instead of numerical):

file1 file10 file2

To preserve ordering on large number of files, use:

find ./ -name "*.zip.*" | sort -V | xargs cat > full.zip

Answered By: Yuval
Categories: Answers Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.