Szukam polecenia do utworzenia wielu (tysięcy) plików zawierających co najmniej 1 KB losowych danych.
Na przykład,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
Jak mogę utworzyć wiele takich plików?
Szukam polecenia do utworzenia wielu (tysięcy) plików zawierających co najmniej 1 KB losowych danych.
Na przykład,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
Jak mogę utworzyć wiele takich plików?
Odpowiedzi:
Ponieważ nie masz żadnych innych wymagań, coś takiego powinno działać:
#! /bin/bash
for n in {1..1000}; do
dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done
(wymaga to bash
przynajmniej {1..1000}
).
bash
z wielu powodów, w tym $((…))
i $RANDOM
. Nawet $(…)
może nie istnieć w każdej powłoce.
bash
ani nie pochodzi od bash
( {1..1000}
pochodzi z zsh
, for n in...; done
a zmienna ekspansja pochodzi z powłoki Bourne'a $(...)
, $((...))
i $RANDOM
chodź ksh). Funkcje, które nie są POSIX {1..1000}
, $RANDOM
oraz /dev/urandom
.
"%04d"
w takim przypadku bash
lub zsh
możesz zrobić {0001..1000}
bezprintf
Odmiana z seq
, xargs
, dd
i shuf
:
seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'
Wyjaśnienie zgodnie z żądaniem dla komentarzy:
seq -w 1 10
wypisuje ciąg liczb od 01 do 10
xargs -n1 -I%
wykonuje polecenia sh -c 'dd ... % ...'
dla każdej liczby sekwencji zastępując % z nią
dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024
tworzy pliki podawane z / dev / urandom z 1024 blokami o rozmiarze bloku
shuf -i1-10 -n1
losowa wartość od 1 do 10
Możesz zrobić coś takiego:
#!/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
Korzysta z jednego potoku i wydaje się dość szybki, ale ma ograniczenie polegające na tym, że wszystkie pliki mają ten sam rozmiar
dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.
Objaśnienie: Użyj dd, aby utworzyć 10240 * 1024 bajtów danych; podzielić to na 10240 osobnych plików o wielkości 1k każdy (nazwy będą się zaczynać od „file.aaaa” do „file.zzzz”)