Crie muitos arquivos com conteúdo aleatório

16

Estou procurando um comando para criar vários (milhares de) arquivos contendo pelo menos 1 KB de dados aleatórios.

Por exemplo,

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

Como posso criar muitos arquivos como este?

    
por João José 01.05.2015 / 16:54

4 respostas

19

Como você não tem outros requisitos, algo assim deve 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

(isso precisa de bash pelo menos para {1..1000} ).

    
por 01.05.2015 / 17:07
5

Uma variação com seq , xargs , dd e shuf :

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

Explicação conforme solicitado por comentários:

seq -w 1 10 imprime uma sequência de números de 01 para 10

xargs -n1 -I% executa o comando sh -c 'dd ... % ...' para cada número de sequência que substitui o % por ele

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024 cria os arquivos alimentados a partir de / dev / urandom com 1024 blocos com blocos de tamanho

shuf -i1-10 -n1 um valor aleatório de 1 para 10

    
por 01.05.2015 / 21:23
1

Você pode fazer algo assim:

#!/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
    
por 01.05.2015 / 17:11
1

Isso usa um único pipeline e parece bastante rápido, mas tem a limitação de que todos os arquivos são do mesmo tamanho

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

Explicação: Use dd para criar 10240 * 1024 bytes de dados; dividir isso em 10240 arquivos separados de 1k cada (os nomes serão executados de 'file.aaaa' a 'file.zzzz')

    
por 19.10.2018 / 22:59