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?
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?
Risposte:
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 bash
almeno per {1..1000}
).
bash
per numerosi motivi, tra cui $((…))
e $RANDOM
. Anche $(…)
potrebbe non esistere in ogni guscio.
bash
né originaria bash
( {1..1000}
proviene da zsh
, for n in...; done
e l'espansione variabile proviene dalla shell Bourne $(...)
, $((...))
e $RANDOM
come ksh). Le caratteristiche che non sono POSIX sono {1..1000}
, $RANDOM
e /dev/urandom
.
"%04d"
in questo caso hai bisogno bash
o zsh
puoi fare {0001..1000}
a menoprintf
Una variante con 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'
Spiegazione come richiesto per commenti:
seq -w 1 10
stampa 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=1024
crea i file alimentati da / dev / urandom con 1024 blocchi con una dimensione di blocco di
shuf -i1-10 -n1
un valore casuale da 1 a 10
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
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')