Crear un archivo gzip de un tamaño predeterminado

8

Quiero probar una carga de archivos de tipo application/x-gzipde contenido de varios tamaños que van desde 100 MB a 999 MB.

¿Cómo puedo crear .gzarchivos de estos tamaños predeterminados? Si lo hago dd if=/dev/zero of=somefile bs=1 seek=100, el archivo resultante después de comprimir suele ser muy pequeño.

Senthil Kumaran
fuente

Respuestas:

18
  • Puede crear un archivo gzip de 10 MB como este:

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

    Esto se usa urandompara obtener una secuencia de bytes de alta entropía: dado que esto es incompresible, la versión comprimida tendrá aproximadamente el mismo tamaño que la entrada.

  • Luego puede catear copias de su archivo gzip juntas:

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

    Treinta copias del archivo fuente tendrán aproximadamente 300 MB, y 100 copias tendrán aproximadamente un gigabyte.

dhag
fuente
Tuve que usar -c 10m en lugar de 10M. El descanso fue bueno. ¡Gracias!
Senthil Kumaran
3
¿Puede concatenar varios archivos gzip y obtener otro archivo gzip con los datos concatenados? Eso parece dudoso.
user253751
2
Sí, puedes concatenar archivos gzip. stackoverflow.com/questions/8005114/…
Brice M. Dempsey
2

Aquí hay otro método. Puede crear archivos controlando la variable de bucle filecount. Esto crea archivos aleatorios de tamaño entre 100 MB y 900 MB y gziplos envía.

#!/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
fuente
3
La salida de base64es compresible en aproximadamente un 25%; Recomendaría omitir el bit base64 y llamar directamente a head /dev/urandom.
dhag
1
@dhag gracias. Edité la respuesta para reflejar eso.
Rahul