ฉันกำลังมองหาคำสั่งเพื่อสร้างไฟล์ (หลายพัน) ไฟล์ที่มีข้อมูลสุ่มอย่างน้อย 1KB
ตัวอย่างเช่น,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
ฉันจะสร้างไฟล์จำนวนมากเช่นนี้ได้อย่างไร
ฉันกำลังมองหาคำสั่งเพื่อสร้างไฟล์ (หลายพัน) ไฟล์ที่มีข้อมูลสุ่มอย่างน้อย 1KB
ตัวอย่างเช่น,
Name size
file1.01 2K
file2.02 3K
file3.03 5K
etc.
ฉันจะสร้างไฟล์จำนวนมากเช่นนี้ได้อย่างไร
คำตอบ:
เนื่องจากคุณไม่มีข้อกำหนดอื่น ๆ สิ่งนี้จึงควรใช้งานได้:
#! /bin/bash
for n in {1..1000}; do
dd if=/dev/urandom of=file$( printf %03d "$n" ).bin bs=1 count=$(( RANDOM + 1024 ))
done
(สิ่งนี้ต้องการbash
อย่างน้อยสำหรับ{1..1000}
)
bash
ด้วยเหตุผลต่าง ๆ นานารวมทั้งและ$((…))
$RANDOM
แม้$(…)
อาจไม่มีอยู่ในทุกเชลล์
bash
เขาก็มิได้เกิดในbash
( {1..1000}
มาจากzsh
, for n in...; done
และการขยายตัวตัวแปรมาจากบอร์นเชลล์$(...)
, $((...))
และ$RANDOM
มา ksh) คุณลักษณะที่ไม่ได้มี POSIX {1..1000}
, และ$RANDOM
/dev/urandom
"%04d"
ซึ่งในกรณีนี้bash
หรือzsh
สามารถทำได้{0001..1000}
โดยไม่มีprintf
รูปแบบกับseq
, xargs
, dd
และshuf
:
seq -w 1 10 | xargs -n1 -I% sh -c 'dd if=/dev/urandom of=file.% bs=$(shuf -i1-10 -n1) count=1024'
คำอธิบายตามที่ร้องขอตามความคิดเห็น:
seq -w 1 10
พิมพ์ลำดับของตัวเลขตั้งแต่01ถึง10
xargs -n1 -I%
รันคำสั่งsh -c 'dd ... % ...'
สำหรับแต่ละหมายเลขลำดับแทนที่%ด้วย
dd if=/dev/urandom of=file.% bs=$(shuf ...) count=1024
สร้างไฟล์ที่ฟีดจาก/ dev / urandomด้วย1024บล็อกด้วยบล็อก
shuf -i1-10 -n1
ค่าสุ่มตั้งแต่1ถึง10
คุณสามารถทำสิ่งนี้:
#!/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
สิ่งนี้ใช้ขั้นตอนเดียวและดูเหมือนว่าค่อนข้างเร็ว แต่มีข้อ จำกัด ว่าไฟล์ทั้งหมดมีขนาดเท่ากัน
dd if=/dev/urandom bs=1024 count=10240 | split -a 4 -b 1k - file.
คำอธิบาย: ใช้ dd เพื่อสร้างข้อมูล 10240 * 1024 ไบต์ แยกออกเป็นไฟล์แยก 10240 ไฟล์ละ 1k (ชื่อจะเรียกใช้จาก 'file.aaaa' ถึง 'file.zzzz')