você não vai gostar, mas: descompactar tudo em uma pasta de trabalho na ordem correta, depois fechar o resultado é a maneira mais eficaz.
caso contrário, você acabará com muitos ciclos de CPU desperdiçados:
- assuma que seu resultado vai para 'first.zip'
- todos os arquivos de '2.zip', '3.zip' etc precisam ser descompactados e, em seguida, compactados novamente em 'first.zip'
- em '2.zip' existe um arquivo 'foobar.txt' e em '3.zip' existe outro arquivo 'foobar.txt'. fundindo-o da maneira que você deseja mesclar leva a 'comprimir X vezes'
- o toc de um .zip está no final do arquivo: você adiciona mais conteúdo (no meio do arquivo .zip atualizando um arquivo no meio) e todo o arquivo deve ser reescrito
então, eu só uso ' descompacte ' wiseley:
% mkdir all
% for x in *.zip ; do unzip -d all -o -u $x ; done
% zip -r all.zip all
a ordem do descompactar é importante, eu não sei o padrão dos seus nomes de zip, mas eu iria extrair o arquivo zip mais novo primeiro, a opção '-u' do descompactar substitui apenas os arquivos se eles são mais recentes ou criam arquivos, se ainda não estiverem lá. Como resultado, você descompactará somente os arquivos mais recentes e zipará o resultado apenas uma vez.