我在Windows中找到了一种方法来做这样的事情
echo "This is just a sample line appended to create a big file. " > dummy.txt
for /L %i in (1,1,21) do type dummy.txt >> dummy.txt
http://www.windows-commandline.com/how-to-create-large-dummy-file/
UNIX 中有没有办法复制文件、追加然后重复该过程?就像是for .. cat file1.txt > file1.txt
?
答案1
yes "Some text" | head -n 100000 > large-file
和csh
/ tcsh
:
repeat 10000 echo some test > large-file
和zsh
:
{repeat 10000 echo some test} > large-file
在 GNU 系统上,另请参阅:
seq 100000 > large-file
或者:
truncate -s 10T large-file
(创建一个 10TiB 稀疏文件(非常大,但不占用磁盘上的任何空间))以及讨论的其他替代方案“创建一个包含大量零字节的测试文件”。
这样做cat file >> file
将是一个坏主意。
首先,它不适用于某些cat
拒绝读取与其输出文件相同的文件的实现。但即使你通过执行 来解决这个问题cat file | cat >> file
,如果file
大于cat
的内部缓冲区,这会导致cat
陷入无限循环,因为它最终会读取它之前写入的数据。
在由旋转硬盘驱动器支持的文件系统上,它的效率也相当低(在达到大于内存中可能缓存的大小之后),因为驱动器需要在读取数据的位置之间来回移动,以及写在哪里。
答案2
您可以使用以下命令在 Solaris 上创建大文件:
mkfile 10g /path/to/file
另一种适用于 Solaris(和 Linux)的方法:
truncate -s 10g /path/to file
也可以使用:
dd if=/dev/zero of=/path/to/file bs=1048576 count=10240
答案3
在 Linux 系统中创建大文件的最快方法是fallocate
:
sudo fallocate -l 2G bigfile
fallocate
操作文件系统,默认情况下并不实际写入数据扇区,因此极其快速地。缺点是它必须以 root 身份运行。
在循环中连续运行它,您可以在几秒钟内填充最大的文件系统。
从man fallocate
Fallocate 用于操作为文件分配的磁盘空间,以取消分配或预分配它。
对于支持fallocate系统调用的文件系统,通过分配块并将它们标记为未初始化来快速完成预分配,不需要对数据块进行IO。这比通过用零填充来创建文件要快得多。
支持 XFS(自 Linux 2.6.38 起)、ext4(自 Linux 3.0 起)、Btrfs(自 Linux 3.7 起)和 tmpfs(自 Linux 3.5 起)。
答案4
如果我理解正确的话,你正在寻找类似的东西:
echo "test line" > file;
for i in {1..21}; do echo "test line" >> file; done
这将创建一个包含 22 次重复“测试行”的文件。如果你想要一个特定的文件大小,你可以使用类似的东西(在Linux上)。 1024 是 1 KB:
while [ $(stat -c "%s" file) -le 1024 ]; do echo "test line" >> file; done
就我个人而言,当我想创建一个大文件时,我使用两个文件并将一个文件插入另一个文件。您可以重复该过程,直到达到所需的大小(此处为 1MB):
echo "test line" > file;
while [ $(stat -c "%s" file) -le 1048576 ]; do
cat file >> newfile
cat newfile >> file
done
请注意,此解决方案通常会超出所需的大小,因为如果文件低于限制,则所有内容都会再次放入其中。
最后,如果您想要的只是一个所需大小的文件并且不需要它实际包含任何内容,您可以使用truncate
:
truncate -s 1M file