web-dev-qa-db-fra.com

Générer des fichiers factices en bash

Je voudrais générer des fichiers factices dans bash. Le contenu importe peu, si c'était aléatoire, ce serait bien, mais tout octet identique est également acceptable.

Ma première tentative a été la commande suivante:

rm dummy.Zip;
touch dummy.Zip;
x=0;
while [ $x -lt 100000 ];
do echo a >> dummy.Zip;
  x=`expr $x + 1`;
done;

Le problème était sa mauvaise performance. J'utilise GitBash sous Windows, donc cela pourrait être beaucoup plus rapide sous Linux, mais le script n'est évidemment pas optimal.

Pourriez-vous me suggérer un moyen plus rapide et agréable de générer des fichiers factices (binaires) de taille donnée?

24
jabal

Vous pouvez essayer la commande head:

$ head -c 100000 /dev/urandom >dummy
42
kev

Vous pouvez utiliser dd à cette fin:

dd if=/dev/urandom bs=1024 count=5 of=dummy
  • si: = dans le fichier
  • de: = fichier de sortie 
  • bs: = taille du bloc

Notez que 

 x=`expr $x + 1`;

n'est pas le moyen le plus efficace de calculer en bash. Effectuez un calcul entier arithmétique selon une double parenthèse:

 x=((x+1)) 

Mais pour un compteur incrémenté dans une boucle, il y avait la boucle for inventée: 

x=0;
while [ $x -lt 100000 ];
do echo a >> dummy.Zip;
  x=`expr $x + 1`;
done;

contrairement à:

for  ((x=0; x<100000; ++x))
do
    echo a 
done >> dummy.Zip 

Voici 3 choses à noter: 

  • contrairement au [-cas, vous n'avez pas besoin d'espacement à l'intérieur des parenthèses. 
  • vous pouvez utiliser l'incrément de préfixe (ou postfixe) ici: ++ x
  • la redirection vers le fichier est extraite de la boucle. Au lieu des 1000000 étapes d'ouverture et de fermeture, le fichier n'est ouvert qu'une seule fois. 

Mais il existe encore une forme plus simple de la boucle for:

for x in {0..100000}
do
    echo a 
done >> dummy.Zip 
11
user unknown

Cela générera un fichier texte de 100 000 octets:

yes 123456789 | head -10000 > dummy.file
8
glenn jackman

$ openssl Rand 1000000 -out random.tmp

4
vbarbarosh

Si votre système de fichiers est ext4, btrfs, xfs ou ocfs2 et que vous ne vous souciez pas du contenu, vous pouvez utiliser fallocate. C'est la méthode la plus rapide si vous avez besoin de gros fichiers.

fallocate -l 100KB dummy_100KB_file

Voir " Créer rapidement un fichier volumineux sur un système Linux? " pour plus de détails.

2
mivk

Peut-être 

dd if=/dev/zero of=/dummy10MBfile bs=1M count=10
0
Daniel Stańczyk

Moyen facile:

faire un test de fichier et mettre une ligne "test"

Puis exécutez:

 cat test >> test

ctrl + c après une minute donnera beaucoup de gigaoctets :)

0
Stefan Certic

echo "Pour imprimer le mot dans l'ordre du fichier" c = 1 pour w dans cat file faire echo "$ c. $ w" c = expr $c +1 terminé

0
Tenzing