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.

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.


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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.