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

touch example.file


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

评论

stackoverflow.com/questions/139261/…

我们都将假设您不关心内容中是否包含零即可。

#1 楼

您可以使用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


评论


...或使用bs = 1M并计数= 24。许多人觉得它更好更容易阅读。

–Bgs
13年15月15日在20:11

也许不使用巨大的块大小,我的系统不喜欢bs = 1G count = 1

–雷神召唤师
16 Dec 7'在0:17

在Mac上,请使用24m(小m),因为Mac不喜欢大M。dd if = / dev / zero of = output.dat bs = 24m count = 1

– SPRBRN
17年2月13日在13:30



在Android(5.1.1,可能(不是)特定于版本或手机)上,我也必须使用小写的m。

– Erik
18-4-12在11:56



特别是大块的问题是什么?我曾希望为1G文件使用1G的块大小。

–追随
19年1月5日在15:03

#2 楼

在非嵌入式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郝海东冠状病六四事件法轮功
18-10-3在1:46



请注意,这不是创建24 MB的文件,而是创建24 MiB的文件(=〜25,2 MB)–对于24 MB的文件,请使用-s 24MB。

–甜点
19年11月14日在12:52

@dessert提问者可能想要24MiB。大多数人不使用二进制前缀。

–吉尔斯'所以-不再是邪恶的'
19年11月14日在13:00

你真的这么认为?就我的经验而言,这恰恰是另一回事–您是否仍然同意,关于某个文件大小的问题,答案至少应该提及差异?也许我认识的人类型错误,但是他们经常对此感到困惑,并想知道为什么他们的500 GiB数据无法容纳在其500 GB硬盘上。

–甜点
19年11月14日13:30

#3 楼

如果您不关心文件的内容,这比使用dd快得多:使用现代系统的任何时间,但是较大的文件可能会非常慢。

评论


请注意,这不会创建24 MB的文件,而是创建24 MiB的文件(=〜25,2 MB)–对于24 MB的文件,请使用-l 24MB。

–甜点
19年11月14日在12:54

这应该是最佳答案。假设您需要分配一个10 GB的文件,完全没有必要像其他答复中建议的那样用零填充。

–马丁·汉森(Martin Hansen)
20年6月8日在7:44

请注意,多个文件系统(包括ext3)不支持fallocate

–Azatik1000
20-10-8在20:47

#4 楼

您可以使用dd:


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


您碰巧正在使用Solaris

mkfile 24m outputfile.out


评论


mkfile似乎也存在于macOS上

–本·弗林(Ben Flynn)
16-09-19在20:28

您还可以传递-n创建一个稀疏文件

–russbishop
17年12月8日17:29

请注意,这不是创建24 MB的文件,而是创建24 MiB的文件(=〜25,2 MB)。

–甜点
19年11月14日在12:55

#5 楼

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;


评论


Q要求24时,这不是说10兆吗?

– Jeff Schaller♦
17年1月19日在20:10

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

– JigglyNaga
17年1月19日在20:41

如果您喜欢先生,请执行以下操作:fallocate -l 10M somefile.dump

– Pascal Andy
17-2-5在18:05