Создать файл определенного размера?

107

Я хотел бы создать файл с именем example.file. Я мог бы использовать

touch example.file

но я хочу, чтобы размер файла был ровно 24 МБ. Я уже проверил man-страницу touch, но таких параметров нет. Есть ли простой способ создания файлов определенного размера?

R_User
источник
Мы все будем предполагать, что вам все равно, какой контент заполнен нулями.
Bgs

Ответы:

137

Вы можете использовать дд:

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
Paul92
источник
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.
Эрик
1
В чем конкретно проблема с большими размерами блоков? Я надеялся использовать размер блока 1G для файла 1G.
felwithe
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 lli 改造 中心 法轮功 六四 事件
29

Если вас не волнует содержимое файла, это намного быстрее, чем при использовании dd:

fallocate -l 24M filename

Очевидно, что использование ddфайла размером 24 МБ в современной системе не займет много времени, но большие файлы могут быть заметно медленными.

SArcher
источник
13

Вы можете использовать дд:

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

Или в случае, если вы используете Solaris

mkfile 24m outputfile.out
BitsOfNix
источник
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
Паскаль Энди