fas*_*sil 127 linux command-line
如何创建一个文件(例如使用touch命令或其他类似方式),但具有特定大小(例如 14 MB)?
用例是使用各种文件大小测试 FTP。如果我们可以创建具有特定大小的文件,则验证 FTP 传输等将很有用。
小智 166
使用truncate:
truncate -s 14M filename
Run Code Online (Sandbox Code Playgroud)
来自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
Run Code Online (Sandbox Code Playgroud)
注意:truncate在您的系统上可能不可用,例如在 Mac OS X 上默认情况下不安装它(但您可以轻松安装它,例如使用 macports)。在这些情况下,您可能需要使用dd或head代替。
ter*_*don 100
编辑:最简单的方法可能truncate是 Ashutosh Vishwa Bandhu 的答案,但正如@offby1所指出的那样,它会创建可能不是您想要的稀疏文件。下面的解决方案会创建正常的完整文件。
以下命令创建一个名为 14MB 的文件foo:
fallocate(感谢@Breakthrough,他在评论中提出了建议,并在下面对Ahmed Masud 的回答进行了投票,其中也提到了这一点。)
fallocate -l 14000000 foo
Run Code Online (Sandbox Code Playgroud)
这个命令特别令人印象深刻,因为它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
Run Code Online (Sandbox Code Playgroud)创建一个填充随机数据的文件
dd if=/dev/urandom of=foo bs=14MB count=1
Run Code Online (Sandbox Code Playgroud)
或者
head -c 14MB /dev/urandom > foo
Run Code Online (Sandbox Code Playgroud)创建一个用\0s填充的文件:
dd if=/dev/zero of=foo.txt bs=14MB count=1
Run Code Online (Sandbox Code Playgroud)
或者
head -c 14MB /dev/zero > foo
Run Code Online (Sandbox Code Playgroud)创建一个填充了另一个文件的前 14MB 数据的文件:
head -c 14MB bar.txt > foo
Run Code Online (Sandbox Code Playgroud)创建一个填充了另一个文件的最后 14MB 数据的文件:
tail -c 14MB bar.txt > foo
Run Code Online (Sandbox Code Playgroud)在上述所有示例中,14*1000*1000如果需要14*1024*1024,文件将替换MB为M. 例如:
dd if=/dev/urandom of=foo bs=14M count=1
head -c 14M /dev/zero > foo
Run Code Online (Sandbox Code Playgroud)
fallocate 只处理字节,所以你必须做 (14*1024*1024=14680064)
fallocate -l 14680064 foo
Run Code Online (Sandbox Code Playgroud)
n61*_*007 21
dd bs=1MB count=14 if=/dev/zero of=<yourfilename>
Run Code Online (Sandbox Code Playgroud)
WARNING dd将默默地覆盖您有权写入的任何内容,如果您有意或无意地指定它。确保你理解dd,例如。通过阅读dd --help,您不会搞砸 dd 命令行,否则您很容易造成不可逆转的数据丢失 -甚至全部.
首先,if=是输入文件,of=是输出文件。在运行命令之前,请务必仔细检查您是否正确。:)
mir*_*vic 13
使用魔法dd;)手册页
$ dd if=/dev/zero of=output.dat bs=1024 count=14336
Run Code Online (Sandbox Code Playgroud)
导致 14MB*1024 = 14336KB,或:
$ dd if=/dev/zero of=output.dat bs=1MB count=14
Run Code Online (Sandbox Code Playgroud)
你会得到 14mb 的 output.dat 文件,用零填充:D
这应该是最快的方法:
SEEK=$SIZE-1
dd if=/dev/zero of=outfile bs=1 seek=$SEEK count=1
Run Code Online (Sandbox Code Playgroud)
否则,只需编写一个快速而肮脏的 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
Run Code Online (Sandbox Code Playgroud)
问题是这两个命令都不是普遍可用的,因此它们不适合编写可移植脚本。但是,如果我通过命令行以交互方式执行此操作,那么这些就是我使用的命令。
默认情况下,它们创建零填充文件而不是稀疏(或“有洞”)文件。他们都-n选择创建稀疏文件。
| 归档时间: |
|
| 查看次数: |
82793 次 |
| 最近记录: |