Створити файл певного розміру?


106

Я хотів би створити файл із назвою example.file. Я міг би скористатися

touch example.file

але я хочу, щоб розмір файлу був рівно 24 Мб. Я вже перевірив сторінку дотику, але такого параметра немає. Чи є простий спосіб генерування файлів певного розміру?



Ми всі будемо вважати, що вам байдуже, який вміст так заповнений нулями, буде добре.
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 використовуйте 24 м (малий м), оскільки Мак не любить велику М.dd if=/dev/zero of=output.dat bs=24m count=1
SPRBRN

1
На Android (5.1.1, може бути (не) версія або телефон) мені довелося використовувати і малі регістри m.
Ерік

1
У чому проблема конкретно великих розмірів блоків? Я сподівався використати розмір блоку 1G для файлу 1G.
Felwit

43

Під вбудованими Linux або Cygwin (або будь-якою системою з GNU coreutils) та FreeBSD:

truncate -s 24m example.file

При цьому створюється файл, заповнений нульовими байтами. Якщо файл вже існує і менший, він розширюється до потрібного розміру з нульовими байтами. Якщо файл вже існує і більший, він обрізається до потрібного розміру.

Нульові байти не займають місця на диску, файл - це розріджений файл .

У багатьох системах 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файлу в 24 Мб не займе часу в сучасній системі, але більші файли можуть бути помітно повільними.


13

Ви можете використовувати dd:

dd, якщо = / dev / zero of = outputfile.out bs = 1024k count = 24

Або на випадок, якщо ви використовуєте Solaris

mkfile 24m outputfile.out

3
Здається, mkfile присутній і на macOS
Бен Флінн,

Ви також можете перейти, -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 мег, тоді як Q запитує 24?
Джефф Шаллер

2
fallocateможе бути гарною відповіддю, але чому всі інші рядки? Скоротіть свою відповідь так, щоб вона виконувала лише те, що було запропоновано, і більше нічого.
JigglyNaga

1
Якщо ви віддаєте перевагу сер: fallocate -l 10M somefile.dump
Паскаль Енді
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.