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

时间:2011-11-01 11:05:27

标签: linux ubuntu command-line

我读过这个问题: How to create a file with a given size in Linux?

但我没有回答我的问题。

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

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

dd if=/dev/zero of=output.dat  bs=390143672  count=1
dd: memory exhausted

390143672 = 372.07 * 1024 * 1024

还有其他方法吗?

非常感谢!

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

4 个答案:

答案 0 :(得分:17)

稀疏文件

dd of=output.dat bs=1 seek=390143672 count=0

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


非稀疏(不透明)文件:

  

编辑,因为人们已经正确地指出稀疏文件具有在某些场景中可能不利的特性,这里是甜蜜点:

您可以使用fallocate(由于util-linux而出现在Debian中):

fallocate -l 390143672 output.dat

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

答案 1 :(得分:7)

更改参数:

dd if=/dev/zero of=output.dat bs=1 count=390143672

否则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

答案 2 :(得分:1)

truncate - 将文件大小缩小或扩展到指定大小

以下示例将putty.log从298字节截断为235字节。

root@ubuntu:~# ls -l putty.log 
-rw-r--r-- 1 root root 298 2013-10-11 03:01 putty.log
root@ubuntu:~# truncate putty.log -s 235
root@ubuntu:~# ls -l putty.log 
-rw-r--r-- 1 root root 235 2013-10-14 19:07 putty.log

答案 3 :(得分:0)

交换计数和bs。 bs字节将在内存中,所以它不能那么大。