สร้างไฟล์ในขนาดที่กำหนดหรือไม่


106

example.fileฉันต้องการที่จะสร้างไฟล์ที่มีชื่อ ฉันสามารถใช้

touch example.file

แต่ฉันต้องการไฟล์ที่มีขนาด 24MB ฉันตรวจสอบ manpage of touch แล้ว แต่ไม่มีพารามิเตอร์เช่นนี้ มีวิธีง่ายๆในการสร้างไฟล์ที่มีขนาดที่แน่นอนหรือไม่?



เราทุกคนจะถือว่าคุณไม่สนใจว่าเนื้อหาใดที่เต็มไปด้วยเลขศูนย์จะไม่เป็นไร
Bgs

คำตอบ:


136

คุณสามารถใช้ dd:

dd if=/dev/zero of=output.dat  bs=24M  count=1

หรือ

dd if=/dev/zero of=output.dat  bs=1M  count=24

หรือบน Mac

dd if=/dev/zero of=output.dat  bs=1m  count=24

2
... หรือใช้ bs = 1M และ count = 24 หลายคนพบว่าดีกว่าและอ่านง่ายกว่า
Bgs

3
อาจไม่ได้ใช้บล็อกขนาดใหญ่ระบบของฉันไม่ชอบbs=1G count=1
ThorSummoner

10
สำหรับ Mac ใช้ 24m (small m) เพราะ Mac ไม่ชอบ M. ตัวใหญ่dd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN

1
บน Android (5.1.1, อาจ (ไม่ใช่) เป็นรุ่นหรือโทรศัพท์เฉพาะ) ฉันต้องใช้ตัวพิมพ์เล็กmด้วย
Erik

1
ปัญหาของขนาดบล็อกใหญ่เป็นพิเศษคืออะไร ฉันหวังว่าจะใช้ขนาดบล็อก 1G สำหรับไฟล์ 1G
felwithe

43

ภายใต้ Linux หรือ Cygwin ที่ไม่ได้ฝัง (หรือระบบใด ๆ ที่มี GNU coreutils) และ FreeBSD:

truncate -s 24m example.file

สิ่งนี้จะสร้างไฟล์ที่เต็มไปด้วย null null หากไฟล์มีอยู่แล้วและมีขนาดเล็กกว่าไฟล์นั้นจะถูกขยายเป็นขนาดที่ร้องขอด้วยค่า null หากไฟล์มีอยู่แล้วและมีขนาดใหญ่กว่าจะถูกตัดทอนขนาดที่ร้องขอ

ไบต์ null ไม่กินพื้นที่ดิสก์ใด ๆ แฟ้มเป็นไฟล์เบาบาง

ในหลายระบบให้head -c 24m </dev/zero >example.fileสร้างไฟล์แบบไม่กระจายข้อมูลเต็มจำนวนไบต์ที่ว่าง หากheadไม่มี-cตัวเลือกในระบบของคุณ (เป็นเรื่องปกติ แต่ไม่ใช่ใน POSIX) คุณสามารถใช้dd bs=1024k count=24 </dev/zero >example.fileแทน (นี่เป็นไปตาม POSIX)


BusyBox ก็มีเช่นกันดังนั้นระบบฝังตัวส่วนใหญ่ก็จะ :-)
Ciro Santilli 事件改造中心中心六四事件事件

29

หากคุณไม่สนใจเนื้อหาของไฟล์นี่จะเร็วกว่าการใช้dd:

fallocate -l 24M filename

เห็นได้ชัดว่าการใช้ddไฟล์ขนาด 24MB จะไม่ใช้เวลากับระบบที่ทันสมัย ​​แต่ไฟล์ที่มีขนาดใหญ่กว่าอาจช้าลงอย่างเห็นได้ชัด


13

คุณสามารถใช้ dd:

dd if = / dev / zero of = outputfile.out bs = 1024k count = 24

หรือในกรณีที่คุณใช้งานโซลาริส

mkfile 24m outputfile.out

3
ดูเหมือนว่า mkfile จะมีอยู่ใน macOS ด้วย
Ben Flynn

คุณสามารถส่ง-nต่อเพื่อสร้างไฟล์ที่กระจัดกระจาย
russbishop

0
FROM_NODE=N01;
echo; cd $MOUNT_PATH; pwd; ls -la; sleep 1; echo;
WHEN="$(date +%Y-%m-%d_%H-%M-%S)";
fallocate -l 10M $MOUNT_PATH/"$FROM_NODE"_"$WHEN".dump
ls -lha; echo;

1
สิ่งนี้ไม่พูดว่า 10 megs ในขณะที่ Q ถามถึง 24 ใช่ไหม
Jeff Schaller

2
fallocateอาจเป็นคำตอบที่ดี แต่ทำไมบรรทัดอื่น ๆ ลดคำตอบลงเพื่อให้เป็นไปตามที่ขอและไม่เหลืออะไรอีกแล้ว
JigglyNaga

1
หากคุณชอบ Sir: fallocate -l 10M somefile.dump
Pascal Andy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.