ฉันกำลังมองหาคำสั่งเพื่อสร้างไฟล์ (หลายพัน) ไฟล์ที่มีข้อมูลสุ่มอย่างน้อย 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')