web-dev-qa-db-fra.com

Créez de nombreux fichiers avec un contenu aléatoire

Je recherche une commande pour créer plusieurs (milliers de) fichiers contenant au moins 1 Ko de données aléatoires.

Par exemple,

Name            size
file1.01        2K
file2.02        3K
file3.03        5K
etc.

Comment puis-je créer de nombreux fichiers comme celui-ci?

23
charles

Puisque vous n'avez aucune autre exigence, quelque chose comme ça devrait fonctionner:

#! /bin/bash
for n in {1..1000}; do
    dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done

(cela nécessite bash au moins pour {1..1000}).

28
lcd047

Une variation avec seq, xargs, dd et shuf:

seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'

Explication demandée par commentaires:

seq -w 1 10 Imprime une séquence de nombres de 1 à 1

xargs -n1 -I% Exécute la commande sh -c 'dd ... % ...' Pour chaque numéro de séquence en remplaçant le % par lui

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024 crée les fichiers alimentés à partir de / dev/urandom avec 1024 blocs avec une taille de bloc de

shuf -i1-10 -n1 Une valeur aléatoire de 1 à 1

10
FloHimself

Cela utilise un seul pipeline et semble assez rapide, mais a la limitation que tous les fichiers sont de la même taille

dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.

Explication: Utilisez dd pour créer 10240 * 1024 octets de données; divisez cela en 10240 fichiers séparés de 1k chacun (les noms s'exécuteront de 'file.aaaa' à 'file.zzzz')

3
Ed Randall

Vous pouvez faire quelque chose comme ça:

#!/bin/bash
filecount=0
while [ $filecount -lt 10000 ] ; do
    filesize=$RANDOM
    filesize=$(($filesize+1024))
    base64 /dev/urandom | 
    head -c "$filesize" > /tmp/file${filecount}.$RANDOM
    ((filecount++))
done
2
rahul