Crea muchos archivos con contenido aleatorio

23

Estoy buscando un comando para crear múltiples (miles de) archivos que contengan al menos 1 KB de datos aleatorios.

Por ejemplo,

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

¿Cómo puedo crear muchos archivos como este?

João José
fuente
¿Qué quisiste decir con "exclusivo"? No tiene sentido en contexto, por lo que probablemente haya usado la palabra incorrecta.
Gilles 'SO- deja de ser malvado'
Quise decir que los archivos no pueden tener el mismo contenido.
João José
Entonces, exclusivo habría significado único.
Somehume

Respuestas:

25

Como no tiene otros requisitos, algo como esto debería funcionar:

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

(Esto necesita bashal menos para {1..1000}).

lcd047
fuente
2
Esto necesita bashpor numerosas razones, incluyendo $((…))y $RANDOM. Incluso $(…)podría no existir en cada caparazón.
G-Man dice 'Restablece a Monica'
1
@ G-Man, en cualquier caso, ninguna de esas características es específica bashni se originó en bash ( {1..1000}proviene de zsh, for n in...; doney la expansión variable proviene del shell Bourne $(...), $((...))y $RANDOM viene ksh). Las características que no son POSIX son {1..1000}, $RANDOMy /dev/urandom.
Stéphane Chazelas
1
Si desea que 1..1000 tenga un ancho constante, necesita "%04d"en ese caso basho zshpuede hacerlo {0001..1000}sinprintf
dave_thompson_085
Característica adicional: Necesito una forma de distribuir estos archivos en muchos subdirectorios anidados aleatoriamente.
stu
10

Una variación con seq, xargs, ddy shuf:

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

Explicación según lo solicitado por comentarios:

seq -w 1 10imprime una secuencia de números del 01 al 10

xargs -n1 -I%ejecuta el comando sh -c 'dd ... % ...'para cada número de secuencia reemplazando el % con él

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024crea los archivos alimentados desde / dev / urandom con 1024 bloques con un tamaño de bloque de

shuf -i1-10 -n1un valor aleatorio de 1 a 10

Flo Mismo
fuente
¿Qué hace esto exactamente?
saruftw
1
@ saru95 explicación agregada.
FloHelf
Esto crea 10 archivos con tamaño aleatorio. Cambie "10" a la cantidad de archivos deseados.
No
2

Puedes hacer algo como esto:

#!/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
rahul
fuente
Intenté hacer esto pero no funcionó. Es posible que desee explicar los parámetros. :)
João José
muy rápido gracias @rahul
BG Bruno
2

Esto usa una sola tubería y parece bastante rápido, pero tiene la limitación de que todos los archivos son del mismo tamaño

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

Explicación: Use dd para crear 10240 * 1024 bytes de datos; divídalo en 10240 archivos separados de 1k cada uno (los nombres se ejecutarán desde 'file.aaaa' hasta 'file.zzzz')

Ed Randall
fuente