Создайте gzip-файл заранее определенного размера


8

Я хочу протестировать загрузку файлов с типом контента application/x-gzipразличного размера от 100 МБ до 999 МБ.

Как я могу создать .gzфайлы с заданными размерами? Если я это сделаю dd if=/dev/zero of=somefile bs=1 seek=100, результирующий файл после архивирования обычно очень маленький.

Ответы:


18
  • Вы можете создать gzip-файл размером 10 МБ, например так:

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

    Используется urandomдля получения потока байтов с высокой энтропией: поскольку это несжимаемо, версия gzipped будет примерно такого же размера, что и входные данные.

  • Затем вы можете объединить копии вашего gzip-файла вместе:

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

    Тридцать копий исходного файла будут иметь размер около 300 МБ, а 100 копий - около гигабайта.


Я должен был использовать -c 10m вместо 10M. Отдых был хорош. Спасибо!
Сентил Кумаран

3
Можете ли вы объединить несколько файлов GZIP и получить другой файл GZIP с объединенными данными? Это кажется хитрым.
user253751

2
Да, вы можете объединить файлы GZIP. stackoverflow.com/questions/8005114/…
Брайс М. Демпси

2

Вот еще один метод. Вы можете создавать файлы, управляя переменной цикла filecount. Это создает случайные файлы размером от 100 МБ до 900 МБ и gzipсохраняет их.

#!/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
Выход из base64сжимаемый примерно на 25%; Я бы порекомендовал пропустить бит base64 и напрямую вызывать голову /dev/urandom.
дхаг

1
@ Dhag спасибо. Я отредактировал ответ, чтобы отразить это.
Рахул
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.