Buat file gzip dengan ukuran yang telah ditentukan

8

Saya ingin menguji unggahan file jenis konten dengan application/x-gzipberbagai ukuran mulai dari 100 MB hingga 999 MB.

Bagaimana saya bisa membuat .gzfile dengan ukuran yang telah ditentukan ini? Jika saya melakukannya dd if=/dev/zero of=somefile bs=1 seek=100, file yang dihasilkan setelah zip biasanya sangat kecil.

Senthil Kumaran
sumber

Jawaban:

18
  • Anda dapat membuat file gzip 10MB seperti ini:

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

    Ini digunakan urandomuntuk mendapatkan aliran byte entropi tinggi: karena ini tidak dapat dimampatkan, versi gzip akan memiliki ukuran yang sama dengan input.

  • Anda kemudian dapat menggabungkan salinan file gzip Anda bersama-sama:

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

    Tiga puluh salinan file sumber akan sekitar 300MB, dan 100 salinan akan sekitar satu gigabyte.

Dhag
sumber
Saya harus menggunakan -c 10m bukannya 10M. Istirahatnya bagus. Terima kasih!
Senthil Kumaran
3
Bisakah Anda menggabungkan beberapa file gzip dan mendapatkan file gzip lain dengan data yang digabungkan? Itu tampak cerdik.
user253751
2
Ya, Anda dapat menggabungkan file gzip. stackoverflow.com/questions/8005114/…
Brice M. Dempsey
2

Ini metode lain. Anda dapat membuat file dengan mengontrol variabel loop filecount. Ini membuat file acak berukuran antara 100MB hingga 900 MB dan gzipitu.

#!/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
sumber
3
Output dari base64kompresibel sekitar 25%; Saya akan merekomendasikan melewatkan bit base64 dan memanggil kepala langsung /dev/urandom.
Dhag
1
@hhag terima kasih. Saya mengedit jawaban untuk mencerminkan hal itu.
rahul