8
votes

Générer un fichier aléatoire à l'aide du script shell

Comment puis-je générer un fichier aléatoire rempli de numéro aléatoire ou de caractère dans le script shell? Je veux aussi spécifier la taille du fichier.


1 commentaires

Quels caractères sont autorisés dans le fichier de sortie? Tout octet aléatoire ou juste ASCII alphanumérique d'octets?


6 Réponses :


19
votes

Utilisez la commande dd code> pour lire les données de /Dev/random.

dd if=/dev/random of=random.dat bs=1000000 count=5000

que lirait 5000 blocs de 1 Mo de données aléatoires, qui est un ensemble de 5 gigaoctets de Données aléatoires! p>

Expérience avec bloquant l'argument pour obtenir la performance optimale. P> P>


4 commentaires

DD -BS = 1024 Nombre = 1 Si / dev / aléatoire de = Test, il ne génère pas la taille du fichier droit que je veux ...


@TadeUsz: On devrait généralement utiliser BS = 1M s'il veut MIB, pas MB.


Après une deuxième lecture de la question, je pense qu'il souhaitait également enregistrer uniquement des caractères (deviner des numéros alphabétiques) et des chiffres au fichier.


Cette commande DD est peu susceptible de terminer car il n'y aura pas 5 gigaoctets d'entropie disponibles. Utilisez / dev / urandom si vous en avez besoin de «aléatoire».



0
votes

La variable aléatoire vous donnera un numéro différent à chaque fois:

echo $RANDOM


0 commentaires

8
votes
head -c 10 /dev/random | base64 | head -c 10 > rand.txt

2 commentaires

Oups, a manqué les personnages et les chiffres, je suppose que vous voulez dire des caractères alphanumériques ... besoin de réviser.


Économie d'entropie: la dernière tendance de la vie verte des egologues. :)



3
votes

Un bon démarrage serait:

http://linuxgazette.net/153/pfefer. HTML P>

#!/bin/bash
# Created by Ben Okopnik on Wed Jul 16 18:04:33 EDT 2008

########    User settings     ############
MAXDIRS=5
MAXDEPTH=2
MAXFILES=10
MAXSIZE=1000
######## End of user settings ############

# How deep in the file system are we now?
TOP=`pwd|tr -cd '/'|wc -c`

populate() {
    cd $1
    curdir=$PWD

    files=$(($RANDOM*$MAXFILES/32767))
    for n in `seq $files`
    do
        f=`mktemp XXXXXX`
        size=$(($RANDOM*$MAXSIZE/32767))
        head -c $size /dev/urandom > $f
    done

    depth=`pwd|tr -cd '/'|wc -c`
    if [ $(($depth-$TOP)) -ge $MAXDEPTH ]
    then
        return
    fi

    unset dirlist
    dirs=$(($RANDOM*$MAXDIRS/32767))
    for n in `seq $dirs`
    do
        d=`mktemp -d XXXXXX`
        dirlist="$dirlist${dirlist:+ }$PWD/$d"
    done

    for dir in $dirlist
    do
        populate "$dir"
    done
}

populate $PWD


0 commentaires

0
votes

enregistrer sous "script.sh", exécuter comme ./script.sh Taille. Le code Printf a été soulevé de http://mywiki.woolgedge.org/bashfaq/071 . Bien sûr, vous pouvez initialiser le tableau Mychars avec une force brute, mychars = ("0" "1" ... "..." ... "Z" "A" ... "Z"), mais ça ne serait pas Soyez amusant, ce serait-ce? XXX


1 commentaires

L'approche / dev / aléatoire et de base64 est également bonne, au lieu de la tuyauterie à travers la base64, du tuyau à travers "TR -C [: ALNUM:]", vous avez juste besoin de compter les bons caractères qui sortent jusqu'à ce que vous soyez terminé .



1
votes

Créez 100 fichiers nommés de manière aléatoire de 50 Mo de taille de 50 Mo:

for i in `seq 1 100`; do echo $i; dd if=/dev/urandom bs=1024 count=50000 > `echo $RANDOM`; done


1 commentaires

Il est préférable d'utiliser mktemp pour créer des fichiers aléatoires. pour i à SEQ 1 100; MyFile = mktemp --tmpdir =. DD si = / dev / urandom BS = 1024 compte = 50000> $ myfile terminé