58

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

3 Answers 3

79

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.

5
  • 2
    I 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
    Nov 27, 2016 at 4:43
  • 3
    While you cannot simply use unzip new.zip, you can just click on new.zip in macOS and it all works. Thanks! Mar 5, 2018 at 23:25
  • 1
    @DanRosenstark Really? It didn't for me... it created a endless sequence of .zip.cpgz then .zip then .zip.cpgz ... Mar 11, 2020 at 14:44
  • 1
    WinRAR can also open the entire archive by double-clicking the .zip.
    – Noumenon
    Jun 8, 2021 at 12:53
  • 2
    cat new.z*[0..9]* new.zip > existing.zip then unzip existing.zip should work. Jun 18 at 19:10
18

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

3
  • 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 itunes.apple.com/us/app/the-unarchiver/id425424353
    – user674669
    Oct 4, 2018 at 0:33
  • 1
    I 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
    Mar 7, 2019 at 14:59
  • 1
    Short and easy. Works for me.
    – user408858
    Mar 3 at 18:53
1

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...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy