Crie um arquivo gzip de tamanho predeterminado

8

Quero testar um upload de arquivos do tipo application/x-gzipde conteúdo de vários tamanhos, variando de 100 MB a 999 MB.

Como posso criar .gzarquivos com esses tamanhos predeterminados? Nesse caso dd if=/dev/zero of=somefile bs=1 seek=100, o arquivo resultante após o fechamento do zíper é geralmente muito pequeno.

Senthil Kumaran
fonte

Respostas:

18
  • Você pode criar um arquivo gzip de 10 MB como este:

    head -c 10M /dev/urandom | gzip -1 >10m.gz
    

    Isso é usado urandompara obter um fluxo de bytes de alta entropia: como isso é incompressível, a versão compactada em gzip tem o mesmo tamanho da entrada.

  • Você pode catenar cópias do seu arquivo gzip:

    cat $(perl -e "print '10m.gz ' x 30") >300m.gz
    

    Trinta cópias do arquivo de origem terão cerca de 300 MB e 100 cópias terão cerca de um gigabyte.

dhag
fonte
Eu tive que usar -c 10m em vez de 10M. O resto foi bom. Obrigado!
Senthil Kumaran
3
Você pode concatenar vários arquivos gzip e obter outro arquivo gzip com os dados concatenados? Isso parece desonesto.
User253751
2
Sim, você pode concatenar arquivos gzip. stackoverflow.com/questions/8005114/…
Brice M. Dempsey
2

Aqui está outro método. Você pode criar arquivos controlando a variável de loop filecount. Isso cria arquivos aleatórios de tamanho entre 100 MB e 900 MB e gzipeles.

#!/bin/bash
filecount=0
while [ $filecount -lt 10 ]
do
filesize=$((RANDOM%9+1))
filesize=$(($filesize*104857600))
</dev/urandom head -c "$filesize" | gzip > /tmp/file${filecount}.$RANDOM.gz
((filecount++))
done
rahul
fonte
3
A saída de base64é compressível em cerca de 25%; Eu recomendaria pular o bit base64 e chamar o head diretamente /dev/urandom.
Dag
1
@ dhag obrigado. Eu editei a resposta para refletir isso.
Rahul