生成一定大小的文件?

R_U*_*ser 153 command-line bash files

我想生成一个名为example.file. 我可以用

touch example.file
Run Code Online (Sandbox Code Playgroud)

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

Pau*_*l92 186

您可以使用 dd:

dd if=/dev/zero of=output.dat  bs=24M  count=1
Run Code Online (Sandbox Code Playgroud)

或者

dd if=/dev/zero of=output.dat  bs=1M  count=24
Run Code Online (Sandbox Code Playgroud)

或者,在 Mac 上,

dd if=/dev/zero of=output.dat  bs=1m  count=24
Run Code Online (Sandbox Code Playgroud)

  • Mac上用24m(小m),因为Mac不喜欢大M。`dd if=/dev/zero of=output.dat bs=24m count=1` (14认同)
  • 也许不要使用大块大小,我的系统不喜欢`bs=1G count=1` (6认同)
  • ...或使用 bs=1M 和 count=24。许多人发现它更好,更容易阅读。 (2认同)
  • 大块大小的具体问题是什么?我曾希望为 1G 文件使用 1G 块大小。 (2认同)

Gil*_*il' 56

在非嵌入式 Linux 或 Cygwin(或任何带有 GNU coreutils 的系统)和 FreeBSD 下:

truncate -s 24m example.file
Run Code Online (Sandbox Code Playgroud)

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

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

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


SAr*_*her 39

如果您不关心文件的内容,这比使用要快得多dd

fallocate -l 24M filename
Run Code Online (Sandbox Code Playgroud)

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

  • 这应该是最佳答案。想象一下,您需要分配一个 10 GB 的文件,完全没有必要像其他回复中建议的那样用零填充它。 (3认同)
  • 请注意,包括 ext3 在内的多个文件系统不支持 Fallocate (2认同)

Bit*_*Nix 15

您可以使用 dd:

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

或者,如果您碰巧使用 Solaris

mkfile 24m outputfile.out
Run Code Online (Sandbox Code Playgroud)

  • mkfile 似乎也存在于 macOS 上 (3认同)
  • 请注意,这不会创建 24 MB 的文件,而是创建 24 **MiB** 的文件 (=~ 25,2 MB)。 (2认同)