如何在Linux中创建任何给定大小的文件?

Doc*_*iki 9 linux ubuntu command-line

我已经读过这个问题: 如何在Linux中创建具有给定大小的文件?

但我没有回答我的问题.

我想创建一个372.07 MB的文件,

我在Ubuntu 10.08中尝试了以下命令:

dd if=/dev/zero of=output.dat  bs=390143672  count=1
dd: memory exhausted
Run Code Online (Sandbox Code Playgroud)

390143672 = 372.07*1024*1024

还有其他方法吗?

非常感谢!

编辑:如何在Linux命令行上使用十进制查看文件的大小.我的意思是,命令行ls -hl只是说:'373M',但文件实际上是"372.07M".

seh*_*ehe 17

稀疏文件

dd of=output.dat bs=1 seek=390143672 count=0
Run Code Online (Sandbox Code Playgroud)

如果底层文件系统支持,则还有创建文件稀疏的额外好处.这意味着,如果某些页面(_blocks)被写入并且文件创建非常快,则不会浪费空间.


非稀疏(不透明)文件:

编辑,因为人们已经正确地指出,稀疏文件具有在某些情况下可能不利的特性,这是最好的一点:

您可以使用fallocate(在Debian中存在util-linux)而不是:

fallocate -l 390143672 output.dat
Run Code Online (Sandbox Code Playgroud)

这仍然具有不需要实际编写块的好处,因此它几乎与创建稀疏文件一样快,并不稀疏.两全其美.


Mat*_*Mat 7

更改您的参数:

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

否则dd尝试在内存中创建370MB缓冲区.

如果你想更有效地做到这一点,首先用大容量块(比如1M)写入372MB部分,然后使用seek选项首先写入文件末尾,用1字节块写尾部.

例如:

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