Базовый скрипт просто проверяет размер 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 проверяется после каждого сжатия. Это означает, что вы получите файлы, размер которых превышает ваш лимит. Это потому, что трудно угадать, каким будет сжатый размер файла, поэтому я не могу проверить его перед добавлением в архив.