How do I split a .zip file into multiple segments?

28

22

I have all the command line utils installed, and need to split an existing .zip (or) new file(s) into (50MB) .zip segments in Terminal.

i.e. Folder X = 900MB > Create self extracting .zip archive > Split .zip archive into 50MB Segments (i.e. Folder.X.001.zip)

According to the man page here are the commands:

Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
Zip 3.0 (July 5th 2008). Usage:
zip [-options] [-b path] [-t mmddyyyy] [-n suffixes] [zipfile list] [-xi list]
  The default action is to add or replace zipfile entries from list, which
  can include the special name - to compress standard input.
  If zipfile and list are omitted, zip compresses stdin to stdout.
  -f   freshen: only changed files  -u   update: only changed or new files
  -d   delete entries in zipfile    -m   move into zipfile (delete OS files)
  -r   recurse into directories     -j   junk (don't record) directory names
  -0   store only                   -l   convert LF to CR LF (-ll CR LF to LF)
  -1   compress faster              -9   compress better
  -q   quiet operation              -v   verbose operation/print version info
  -c   add one-line comments        -z   add zipfile comment
  -@   read names from stdin        -o   make zipfile as old as latest entry
  -x   exclude the following names  -i   include only the following names
  -F   fix zipfile (-FF try harder) -D   do not add directory entries
  -A   adjust self-extracting exe   -J   junk zipfile prefix (unzipsfx)
  -T   test zipfile integrity       -X   eXclude eXtra file attributes
  -y   store symbolic links as the link instead of the referenced file
  -e   encrypt                      -n   don't compress these suffixes
  -h2  show more help

with -h2 I get:

Splits (archives created as a set of split files):
  -s ssize  create split archive with splits of size ssize, where ssize nm
              n number and m multiplier (kmgt, default m), 100k -> 100 kB
  -sp       pause after each split closed to allow changing disks
      WARNING:  Archives created with -sp use data descriptors and should
                work with most unzips but may not work with some
  -sb       ring bell when pause
  -sv       be verbose about creating splits
      Split archives CANNOT be updated, but see --out and Copy Mode below

.....

Using --out (output to new archive):
  --out oa  output to new archive oa
  Instead of updating input archive, create new output archive oa.
  Result is same as without --out but in new archive.  Input archive
  unchanged.
      WARNING:  --out ALWAYS overwrites any existing output file
  For example, to create new_archive like old_archive but add newfile1
  and newfile2:
    zip old_archive newfile1 newfile2 --out new_archive
  Cannot update split archive, so use --out to out new archive:
    zip in_split_archive newfile1 newfile2 --out out_split_archive
  If input is split, output will default to same split size
  Use -s=0 or -s- to turn off splitting to convert split to single file:
    zip in_split_archive -s 0 --out out_single_file_archive
      WARNING:  If overwriting old split archive but need less splits,
                old splits not overwritten are not needed but remain

X-Man

Posted 2011-09-16T00:53:57.210

Reputation:

Answers

40

You have existing.zip but want to split it into 50M sized parts.

zip existing.zip --out new.zip -s 50m

will create

new.zip
new.z01
new.z02
new.z03
....

To extract them, you should first collect the files together and run zip -F new.zip --out existing.zip or zip -s0 new.zip --out existing.zip, to recreate your existing.zip. Then you can simply unzip existing.zip.


You'd expect unzip new.zip would work, but unfortunately it's not implemented

warning [new.zip]:  zipfile claims to be last disk of a multi-part archive;
  attempting to process anyway, assuming all parts have been concatenated
  together in order.  Expect "errors" and warnings...true multi-part support
  doesn't exist yet (coming soon).

and in my tests, concatenating the parts as it suggests, i.e. with cat, and running unzip, failed to extract all my files.

Daniel Beck

Posted 2011-09-16T00:53:57.210

Reputation: 98 421

1I was able to extract my data from the split .zip files (created with Zip 3.0 on the Mac OS X 10.11 command line) using 7-Zip running on Windows in a virtual machine. I just pointed 7-Zip at the new.zip file in a shared folder and it worked like a charm. – User5910 – 2016-11-27T04:43:46.253

3While you cannot simply use unzip new.zip, you can just click on new.zip in macOS and it all works. Thanks! – Dan Rosenstark – 2018-03-05T23:25:37.217

4

This is what works for me:

zip -s 50m new.zip big.iso

For 50MG parts

new.zip
new.z01
new.z02
...

Create chuncks of 3G with this (good for puting large files on a FAT32 disk)

zip -s 3g new.zip big.iso

New Mac OSs extract these files when double clicking the new.zip file

guya

Posted 2011-09-16T00:53:57.210

Reputation: 211

2

Double clicking the zip file on mac os 10.13.6 High Sierra didn't uncompress the original archive for me. I had to use 'The unarchiver' app from https://itunes.apple.com/us/app/the-unarchiver/id425424353

– user674669 – 2018-10-04T00:33:51.067

1I had split zip file created by 7zip on windows, which ended up with a different file naming scheme. Unarchiver was able to extract that too! – Max – 2019-03-07T14:59:48.777

0

I had to use Unarchiver to extract the resulting multipart ZIP file as well, but oddly, it recreated the original path to the zip file. e.g. I originally created the archive here:

/Volumes/External HD/Test Folder/my-multipart-archive-parts.zip

And copied all parts of the archive to here:

~/Desktop/Test Folder/

When I used Unarchiver to extract the files, it created this:

~/Desktop/Test Folder/Volumes/External HD/Test Folder/my-multipart-archive.zip

Very odd...

John McKenzie

Posted 2011-09-16T00:53:57.210

Reputation: 1