Como posso ver, você tem apenas um diretório com um grande conjunto de arquivos, portanto, é necessário dividir a lista de arquivos em pequenos conjuntos, depois concatená-los, depois zipar e, se necessário, excluir arquivos pequenos.
Eu posso sugerir apenas da seguinte maneira:
cd /to/dir/with/many/files/
mkdir ../tmp
find . | split -l 50000 ../tmp/x
for i in ../tmp/x* ; do
while read filename ; do
cat "$filename" >> "${i}.text" ;
# rm "$filename" # uncomment it only if you need to delete small files
done <"$i"
zip "${i}.zip" "${i}.text"
# rm "${i}.text" # uncomment it only if you need to delete result file
done