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.

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.


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

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.