Создайте 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 копий - около гигабайта.

dhag
источник
Я должен был использовать -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 спасибо. Я отредактировал ответ, чтобы отразить это.
Рахул