En az 1 KB rasgele veri içeren birden fazla (binlerce) dosya oluşturma komutunu arıyorum.
Örneğin,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
Bunun gibi birçok dosyayı nasıl oluşturabilirim?
En az 1 KB rasgele veri içeren birden fazla (binlerce) dosya oluşturma komutunu arıyorum.
Örneğin,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
Bunun gibi birçok dosyayı nasıl oluşturabilirim?
Yanıtlar:
Başka gereksiniminiz olmadığından, bunun gibi bir şey işe yaramalı:
#! /bin/bash
for n in {1..1000}; do
dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done
(Bunun bash
için en azından ihtiyacı var {1..1000}
).
bash
dahil birçok nedenden dolayı ihtiyaç duyuyor . Her kabuğun içinde bile bulunmayabilir . $((…))
$RANDOM
$(…)
bash
ne de mi ortaya çıktı bash
( {1..1000}
gelir zsh
, for n in...; done
ve değişken genişleme Bourne kabuğundan gelir $(...)
, $((...))
ve $RANDOM
ksh gel). POSIX olmayan özelliklerdir {1..1000}
, $RANDOM
ve /dev/urandom
.
"%04d"
, hangi durumda bash
ya zsh
da {0001..1000}
no ile printf
Olan bir varyasyon seq
, xargs
, dd
ve shuf
:
seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'
Yorum başına talep edildiği gibi açıklama:
seq -w 1 10
01 ile 10 arasında bir sayı dizisi yazdırır
xargs -n1 -I%
komutu yürütür sh -c 'dd ... % ...'
yerine her bir sıra numarası için % bununla
dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024
den beslenen dosyalar oluşturur / dev / urandom ile 1024 blok boyutlu bir bloklar
shuf -i1-10 -n1
1 ile 10 arasında rastgele bir değer
Böyle bir şey yapabilirsiniz:
#!/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
Bu, tek bir boru hattı kullanıyor ve oldukça hızlı görünüyor, ancak tüm dosyaların aynı boyutta olması sınırlaması var
dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.
Açıklama: 10240 * 1024 bayt veri oluşturmak için dd kullanın; her biri 1k olan 10240 ayrı dosyaya bölün (isimler 'file.aaaa' ile 'file.zzzz' arasında çalışır)