生成一定大小的文件?


106

我想生成一个名称为的文件example.file。我可以用

touch example.file

但我希望文件大小恰好为24MB。我已经检查了touch的联机帮助页,但是没有像这样的参数。有一种简单的方法可以生成一定大小的文件吗?



我们都将假设您不在乎用零填充的内容就可以了。
Bgs

Answers:


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米(小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

这将创建一个完整的空字节文件。如果文件已经存在并且较小,则将其扩展为具有空字节的请求大小。如果文件已经存在并且较大,则将其截断为请求的大小。

空字节不占用任何磁盘空间,该文件是一个稀疏文件

在许多系统上,head -c 24m </dev/zero >example.file创建一个充满空字节的非稀疏文件。如果您的系统上head没有-c选项(这很常见,但在POSIX中则没有),则可以dd bs=1024k count=24 </dev/zero >example.file改用(这是POSIX兼容的)。



29

如果您不关心文件的内容,这比使用dd以下方法快得多:

fallocate -l 24M filename

显然,dd在现代系统上使用24MB文件不会花费任何时间,但是较大的文件可能会明显变慢。


13

您可以使用dd:

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

或者如果您碰巧正在使用Solaris

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
Q要求24时,这不是说10兆吗?
杰夫·谢勒

2
fallocate可能是一个很好的答案,但是为什么所有其他行呢?减少您的答案,使其仅执行要求的内容,仅此而已。
JigglyNaga

1
如果您喜欢先生: fallocate -l 10M somefile.dump
Pascal Andy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.