Não tenho certeza se segui completamente as regras, mas pode ser mais fácil usar os utilitários padrão (e simplificar as regras para o que e quando criar):
find . -type f | split -d -a3 -l $num --filter='zip -@ $FILE.zip' - "$pfx".
find é bastante óbvio, ajuste as opções ao seu gosto. Você pode querer classificar a lista antes de passar sua saída para split .
split :
-
- d- use numeração em vez de sufixos alfabéticos -
-a3- comprimento do sufixo (a numeração) 3 lugares (dígitos neste caso) -
-l- número de linhas após o qual aumentar o contador -
--filter=COMMAND- passar linhas para um comando em vez de gravar em um arquivo -
COMMAND-$FILEé interpretado porsplitcomo um nome de arquivo que normalmente usaria para escrita, o que significa que ele deve estar entre aspas simples (ou barras invertidas para evitar interpretação pelo shell executando a linha de comando acima) -
-- requer explicitamente a análise da entrada padrão -
"$pfx".seu prefixo preferido. O ponto é intencional,splitnão o anexa automaticamente.