Uma maneira, no bash (desde que você marcou):
-
Reúna a lista de prefixos de nomes de arquivos em uma matriz associativa:
declare -A prefixes for f in *; do prefixes[${f%%.*}]=1; done
-
Faça um loop pelos prefixos e crie os arquivos zip:
for p in "${!prefixes[@]}"; do zip "$p" "$p".*; done