/ / Zip arquivos em vários arquivos zip com comprimento máximo - bash, shell, zip, processamento em lote, zsh

Arquivos Zip em vários arquivos zip com comprimento máximo - bash, shell, zip, processamento em lote, zsh

Eu tenho um diretório com milhares de arquivos. Esses arquivos têm cerca de dez a cem Kb cada. Agora eu estou procurando uma maneira de ZIP esses arquivos em arquivos ZIP. No entanto, existem algumas restrições.

  • Os arquivos ZIP têm um tamanho máximo de 4 MB cada.
  • Os arquivos precisam ser individualmente extraíveis, dividir e entrar em contato com um grande arquivo ZIP, portanto, não é uma opção.
  • Eu estou vinculado ao ZIP. TAR, RAR, DAR, etc não é uma opção.

A maioria dos arquivos já está em algum formato compactado (por exemplo, imagens). Portanto, é correto presumir que o arquivo zip tenha aproximadamente o tamanho da soma de seu conteúdo extraído.

Eu estava pensando na direção de usar Bash / ZSHfazer um loop nos arquivos, mantendo uma matriz de nomes de arquivos e a soma do tamanho do arquivo. Assim que o tamanho máximo total do arquivo for excedido, eu gostaria de compactar os arquivos no array de nomes de arquivos e continuar com um novo array e um contador de tamanho de arquivo.

Respostas:

0 para resposta № 1

Você pode adicionar arquivos ao arquivo e testar seu tamanho em cada iteração. Então, se o tamanho estiver acima do limite, remova o último arquivo do arquivo e crie um arquivo novo.

#!/bin/bash
count=1
for file in *;
do
zip "archive$count.zip" "$file"
archivesize=$(wc -c < "$file")
if (( archivesize>2*1024*1024  )); then
zip -d "archive$count.zip" "$file"
((count++))
zip "archive$count.zip" "$file"
fi
done