unzip -l
lista o tamanho de cada arquivo e imprime uma linha final com sua soma. Assim, você pode percorrer os arquivos zip e adicionar a saída de unzip -l "$zip" | awk 'END {print $1}'
ou de unzip -Zt "$zip" | awk 'END {print $3}'
. Para um loop de shell, unzip -Zt
pode ser um pouco mais rápido:
total=0
for z in *.zip; do
set $(unzip -Zt -- "$z")
total=$((total + $3))
done
Isso informa apenas o tamanho total dos arquivos. Cada arquivo tem uma pequena sobrecarga: o espaço para armazenar seu nome, o espaço para armazenar alguns de seus metadados e possivelmente um pouco de espaço não utilizado, porque a maioria dos sistemas de arquivos aloca arquivos em blocos. Em sistemas de arquivos típicos, a sobrecarga pode ser de até alguns kilobytes. Não é exatamente previsível, porque a sobrecarga depende do tamanho do arquivo, da estrutura do diretório (devido à sobrecarga do diretório) e dos recursos do sistema de arquivos para mesclar vários arquivos pequenos no mesmo bloco.
Se a maioria dos arquivos tiver mais que alguns kilobytes, não se preocupe com isso. Mas se os arquivos forem muito pequenos, talvez você leve em conta a sobrecarga. Mais uma vez, o overhead depende do sistema de arquivos. No ext4, cada arquivo preenche um bloco inteiro (4kB por padrão na maioria dos sistemas). O script a seguir aproxima o tamanho total, arredondando cada arquivo até 4 kB e adicionando o comprimento do nome do arquivo mais alguns bytes.
for z in *.zip; do
unzip -l -- "$z"
done | awk '
$2 ~ /^[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]$/ {total += ($1+4095)/4096*4096 + length($0)}
END {print total}
'