Erstellen Sie eine gzip-Datei mit einer vorgegebenen Größe


8

Ich möchte einen Upload von Dateien mit Inhaltstypen application/x-gzipin verschiedenen Größen von 100 MB bis 999 MB testen .

Wie kann ich .gzDateien mit diesen vorgegebenen Größen erstellen ? Wenn ich das tue dd if=/dev/zero of=somefile bs=1 seek=100, ist die resultierende Datei nach dem Zippen normalerweise sehr klein.

Antworten:


18
  • Sie können eine 10-MB-GZIP-Datei wie folgt erstellen:

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

    Dies wird verwendet urandom, um einen Byte-Stream mit hoher Entropie zu erhalten: Da dies inkompressibel ist, hat die komprimierte Version ungefähr die gleiche Größe wie die Eingabe.

  • Sie können dann Kopien Ihrer gzip-Datei zusammen verketten:

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

    Dreißig Kopien der Quelldatei sind ungefähr 300 MB groß, und 100 Kopien sind ungefähr ein Gigabyte groß.


Ich musste -c 10m anstelle von 10M verwenden. Ruhe war gut. Vielen Dank!
Senthil Kumaran

3
Können Sie mehrere GZIP-Dateien verketten und eine weitere GZIP-Datei mit den verketteten Daten erhalten? Das scheint zwielichtig.
user253751

2
Ja, Sie können gzip-Dateien verketten. stackoverflow.com/questions/8005114/…
Brice M. Dempsey

2

Hier ist eine andere Methode. Sie können Dateien erstellen, indem Sie die Schleifenvariable steuern filecount. Dadurch werden zufällige Dateien mit einer Größe zwischen 100 MB und 900 MB erstellt 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
Die Ausgabe von base64ist um etwa 25% komprimierbar; Ich würde empfehlen, das base64-Bit zu überspringen und head direkt aufzurufen /dev/urandom.
Dhag

1
@dhag danke. Ich habe die Antwort bearbeitet, um dies widerzuspiegeln.
Rahul
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.