Crea molti file con contenuto casuale


23

Sto cercando un comando per creare più (migliaia di) file contenenti almeno 1 KB di dati casuali.

Per esempio,

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

Come posso creare molti file come questo?


Cosa intendevi con "esclusivo"? Non ha senso nel contesto, quindi probabilmente hai usato la parola sbagliata.
Gilles 'SO- smetti di essere malvagio'

Volevo dire che i file non possono avere lo stesso contenuto.
João José,

Quindi, esclusivo avrebbe significato unico.
Somehume

Risposte:


25

Dal momento che non hai altri requisiti, qualcosa del genere dovrebbe funzionare:

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

(questo richiede bashalmeno per {1..1000}).


2
Ciò è necessario bashper numerosi motivi, tra cui $((…))e $RANDOM. Anche $(…)potrebbe non esistere in ogni guscio.
G-Man dice "Reinstate Monica"

1
@G-Man, in ogni caso, nessuna di queste caratteristiche è specifica bashné originaria bash ( {1..1000}proviene da zsh, for n in...; donee l'espansione variabile proviene dalla shell Bourne $(...), $((...))e $RANDOM come ksh). Le caratteristiche che non sono POSIX sono {1..1000}, $RANDOMe /dev/urandom.
Stéphane Chazelas

1
Se volevi che 1..1000 fosse a larghezza costante, "%04d"in questo caso hai bisogno basho zshpuoi fare {0001..1000}a menoprintf
dave_thompson_085

Funzionalità aggiuntiva: ho bisogno di un modo per diffondere questi file su molte sottodirectory nidificate in modo casuale.
stu

10

Una variante con seq, xargs, dde shuf:

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

Spiegazione come richiesto per commenti:

seq -w 1 10stampa una sequenza di numeri da 01 a 10

xargs -n1 -I%esegue il comando sh -c 'dd ... % ...'per ciascun numero di sequenza sostituendo % con esso

dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024crea i file alimentati da / dev / urandom con 1024 blocchi con una dimensione di blocco di

shuf -i1-10 -n1un valore casuale da 1 a 10


Wat fa esattamente questo?
saruftw,

1
@ spiegazione saru95 aggiunta.
FloHimself

Questo crea 10 file con dimensioni casuali. Cambia "10" con il numero di file desiderato.
No, il

2

Puoi fare qualcosa del genere:

#!/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

Ho provato a farlo ma non ha funzionato. Potresti voler spiegare i parametri. :)
João José,

molto veloce grazie a @rahul
BG Bruno il

2

Questo utilizza una singola pipeline e sembra abbastanza veloce, ma ha la limitazione che tutti i file hanno le stesse dimensioni

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

Spiegazione: Utilizzare dd per creare 10240 * 1024 byte di dati; dividerlo in 10240 file separati da 1k ciascuno (i nomi verranno eseguiti da 'file.aaaa' attraverso 'file.zzzz')

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.