Базовый скрипт просто проверяет размер zip-файла и соответственно переключает zip-файлы. Что-то вроде этого:
#!/usr/bin/env bash
## This counter is used to change the zip file name
COUNTER=0;
## The maximum size allowed for the zip file
MAXSIZE=1024;
## The first zip file name
ZIPFILE=myzip"$COUNTER".zip;
## Exit if the zip file exists already
if [ -f $ZIPFILE ]; then
    echo $ZIPFILE exists, exiting...
    exit;
fi
## This will hold the zip file's size, initialize to 0
SIZE=0;
## Go through each of the arguments given in the command line
for var in "$@"; do
    ## If the zip file's current size is greater than or
    ## equal to $MAXSIZE, move to the next zip file
    if [[ $SIZE -ge $MAXSIZE ]]; then
    let COUNTER++;
    ZIPFILE=myzip"$COUNTER".zip;
    fi
    ## Add file to the appropriate zip file
    zip -q $ZIPFILE $var;
    ## update the $SIZE
    SIZE=`stat -c '%s' $ZIPFILE`;
done
ПРЕДОСТЕРЕЖЕНИЯ:
- Сценарий ожидает файлы, а не каталоги, если вы хотите, чтобы он запускался в каталогах, добавьте -rк командеzip. Однако он не будет проверять размер файла, пока каждый каталог не будет сжат.
- Размер файла zip проверяется после каждого сжатия. Это означает, что вы получите файлы, размер которых превышает ваш лимит. Это потому, что трудно угадать, каким будет сжатый размер файла, поэтому я не могу проверить его перед добавлением в архив.