Já pensou em usar algo como Robocopy com a opção /MT
? Eu acho que ter uma cópia paralela vai superar a compressão, transferência e descompressão. Gostaria de começar com o padrão de 8 threads e monitorar o comprimento da fila de disco em ambas as extremidades para ter certeza de que você está saturando, mas não debater o disco até a morte. O Robocopy também pode copiar apenas os arquivos que realmente precisam ser transferidos.
Usage :: ROBOCOPY source destination [file [file]...] [options]
/MT[:n] :: Do multi-threaded copies with n threads (default 8).
n must be at least 1 and not greater than 128.
Se isso não funcionar por algum motivo, tive sucesso usando o executável zip.exe do pacote UnxUtils ou para necessidades de zip mais extremas, o executável KZIP.exe . O Kzip pode ser um pouco mais lento na compactação nas configurações extremas de compactação, mas eu não vi um compactador de arquivos compactados que consiga vencê-lo consistentemente para eficiência de espaço com um arquivo padrão. Naturalmente, ele será executado como um executável autônomo e será fácil de usar como script de linha de comando. Não posso dizer que os usei em diretórios extremamente grandes.
Você também deve estar ciente de que um arquivo ZIP "padrão" pode ter no máximo 4 GB de tamanho e conter no máximo 65535 arquivos. Se sua estrutura exceder esses limites, você precisará usar versões mais recentes do padrão zip (ZIP64).