Crea un file gzip di dimensioni predeterminate


8

Voglio testare un caricamento di file di tipo application/x-gzipdi contenuto di varie dimensioni che vanno da 100 MB a 999 MB.

Come posso fare per creare .gzfile di queste dimensioni predeterminate? In tal caso dd if=/dev/zero of=somefile bs=1 seek=100, il file risultante dopo la compressione è in genere molto piccolo.

Risposte:


18
  • Puoi creare un file gzip da 10 MB in questo modo:

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

    Questo utilizza urandomper ottenere un flusso di byte ad alta entropia: poiché questo è incomprimibile, la versione con gzip avrà circa la stessa dimensione dell'input.

  • È quindi possibile catenare copie del file gzip insieme:

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

    Trenta copie del file sorgente saranno circa 300 MB e 100 copie saranno circa un gigabyte.


Ho dovuto usare -c 10m invece di 10M. Il riposo è stato buono. Grazie!
Senthil Kumaran,

3
Puoi concatenare diversi file gzip e ottenere un altro file gzip con i dati concatenati? Sembra complicato.
user253751

2
Sì, puoi concatenare i file gzip. stackoverflow.com/questions/8005114/…
Brice M. Dempsey

2

Ecco un altro metodo. È possibile creare file controllando la variabile loop filecount. Questo crea file casuali di dimensioni comprese tra 100 MB e 900 MB e gzipli.

#!/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
L'output da base64è comprimibile di circa il 25%; Consiglierei di saltare il bit base64 e chiamare direttamente la testa /dev/urandom.
Dhag,

1
@dhag grazie. Ho modificato la risposta per riflettere ciò.
rahul,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.