Créer un fichier gzip d'une taille prédéterminée

8

Je veux tester un téléchargement de fichiers de type de contenu application/x-gzipde différentes tailles allant de 100 Mo à 999 Mo.

Comment puis-je créer des .gzfichiers de ces tailles prédéterminées? Si je le fais dd if=/dev/zero of=somefile bs=1 seek=100, le fichier résultant après avoir zippé est généralement très petit.

Senthil Kumaran
la source

Réponses:

18
  • Vous pouvez créer un fichier gzip de 10 Mo comme ceci:

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

    Cela permet urandomd'obtenir un flux d'octets à haute entropie: comme c'est incompressible, la version gzippée aura à peu près la même taille que l'entrée.

  • Vous pouvez ensuite caténaliser des copies de votre fichier gzip ensemble:

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

    Trente copies du fichier source feront environ 300 Mo, et 100 copies feront environ un gigaoctet.

dhag
la source
J'ai dû utiliser -c 10m au lieu de 10M. Le repos était bon. Merci!
Senthil Kumaran
3
Pouvez-vous concaténer plusieurs fichiers gzip et obtenir un autre fichier gzip avec les données concaténées? Cela semble douteux.
user253751
2
Oui, vous pouvez concaténer des fichiers gzip. stackoverflow.com/questions/8005114/…
Brice M. Dempsey
2

Voici une autre méthode. Vous pouvez créer des fichiers en contrôlant la variable de boucle filecount. Cela crée des fichiers aléatoires de taille comprise entre 100 Mo et 900 Mo et les gzips.

#!/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
la source
3
La sortie de base64est compressible d'environ 25%; Je recommanderais de sauter le bit base64 et d'appeler directement la tête /dev/urandom.
dhag
1
@dhag merci. J'ai modifié la réponse pour refléter cela.
rahul