Answers:
用途truncate
:
truncate -s 14M filename
来自man truncate
:
DESCRIPTION
Shrink or extend the size of each FILE to the specified size
[...]
-s, --size=SIZE
set or adjust the file size by SIZE
注意:truncate
您的系统可能不可用,例如在Mac OS X上默认未安装(但您可以轻松地安装它,例如使用macports)。在这些情况下,您可能需要使用dd
或head
代替。
touch
不需要不过,你可以简单地运行truncate -s 14M filename
它会创建filename
直接。
编辑:最简单的方法可能truncate
是Ashutosh Vishwa Bandhu的答案,但正如@ offby1所指出的那样,它创建的稀疏文件可能不是您想要的。下面的解决方案创建普通的完整文件。
以下命令创建一个14MB的文件,名为foo
:
fallocate
(感谢@Breakthrough在评论中提出建议,并在下面对艾哈迈德·马苏德的回答也投了赞成票。)
fallocate -l 14000000 foo
该命令特别令人印象深刻,因为它truncate
与所需文件大小一样快(瞬时)(不同于其他解决方案,后者对于大文件而言会很慢),并且可以创建普通文件,而不是稀疏文件:
$ truncate -s 14MB foo1.txt
$ fallocate -l 14000000 foo2.txt
$ ls -ls foo?.txt
0 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:54 foo1.txt
13672 -rw-r--r-- 1 terdon terdon 14000000 Jun 21 03:55 foo2.txt
创建一个填充随机数据的文件
dd if=/dev/urandom of=foo bs=14MB count=1
要么
head -c 14MB /dev/urandom > foo
创建一个充满\0
s 的文件:
dd if=/dev/zero of=foo.txt bs=14MB count=1
要么
head -c 14MB /dev/zero > foo
创建一个文件,其中填充了另一个文件的前14MB数据:
head -c 14MB bar.txt > foo
创建一个文件,其中填充了另一个文件的最后14MB数据:
tail -c 14MB bar.txt > foo
在以上所有示例中,14*1000*1000
如果需要14*1024*1024
,该文件将为,替换MB
为M
。例如:
dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo
fallocate
仅以字节为单位,因此您必须这样做(14 * 1024 * 1024 = 14680064)
fallocate -l 14680064 foo
dd
如果有更简单,破坏性较小的方法,我建议您不要使用。
dd
解决方案都有一个非dd替代方案的原因。
这应该是最快的方法:
SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1
否则,只需编写一个快速且肮脏的C或perl程序,该程序将查找到确切位置并写入一个字节。这比将数据实际转储到块上快很多。
如果要避免文件稀疏,则可以在Linux(和其他系统)上使用fallocate -l <length>
from util-linux
。
如果这不可用,并且您具有POSIX兼容系统,则可以使用posix_fallocate()库调用编写快速而肮脏的程序。posix_fallocate保证分配指定的范围,因此如果该范围成功返回,则在以后使用该范围时不会获得磁盘满的信息
尽管这dd
是一种可移植的方法,但是命令mkfile
和xfs_mkfile
是专门为此目的而编写的,并且速度更快:
mkfile size[b|k|m|g] filename
xfs_mkfile size[b|k|m|g] filename
问题在于这两个命令都不是通用的,因此它们不适用于编写可移植脚本。但是,如果我通过命令行进行交互操作,那么这些就是我使用的命令。
默认情况下,它们创建零填充文件,而不创建稀疏(或“有孔”)文件。它们都-n
选择创建稀疏文件。