在bash中生成虚拟文件

时间:2012-03-21 07:39:37

标签: bash dummy-data

我想在bash中生成虚拟文件。内容无关紧要,如果它是随机的那就很好,但所有相同的字节也是可以接受的。

我的第一次尝试是以下命令:

rm dummy.zip;
touch dummy.zip;
x=0;
while [ $x -lt 100000 ];
do echo a >> dummy.zip;
  x=`expr $x + 1`;
done;

问题在于其表现不佳。我在Windows上使用GitBash,因此在Linux下可能要快得多,但脚本显然不是最佳的。

你能否建议我更快更好地生成给定大小的虚拟(二进制)文件?

8 个答案:

答案 0 :(得分:45)

您可以尝试head命令:

$ head -c 100000 /dev/urandom >dummy

答案 1 :(得分:11)

您可以将 dd 用于此目的:

dd if=/dev/urandom bs=1024 count=5 of=dummy
  • if:= in file
  • of:= out file
  • bs:=块大小

注意,

 x=`expr $x + 1`;

不是bash中最有效的计算方法。在双圆括号中进行算术整数计算:

 x=((x+1)) 

但是对于循环中递增的计数器,发明了for循环:

x=0;
while [ $x -lt 100000 ];
do echo a >> dummy.zip;
  x=`expr $x + 1`;
done;

与之相反:

for  ((x=0; x<100000; ++x))
do
    echo a 
done >> dummy.zip 

以下三点需要注意:

  • 与[-case不同,你不需要在parens内部的间距。
  • 你可以在这里使用前缀(或后缀)增量:++ x
  • 重定向到文件被拉出循环。该文件只打开一次,而不是1000000次打开和关闭步骤。

但是for循环还有一个更简单的形式:

for x in {0..100000}
do
    echo a 
done >> dummy.zip 

答案 2 :(得分:9)

这将生成一个100,000字节大的文本文件:

yes 123456789 | head -10000 > dummy.file

答案 3 :(得分:4)

$ openssl rand 1000000 -out random.tmp

答案 4 :(得分:3)

如果您的文件系统是ext4,btrfs,xfs或ocfs2,并且如果您不关心内容,则可以使用fallocate。如果你需要大文件,这是最快的方法。

fallocate -l 100KB dummy_100KB_file

有关详细信息,请参阅“Quickly create a large file on a Linux system?”。

答案 5 :(得分:0)

echo“从文件中依次打印单词” C = 1 for cat file中的w 做     回声“$ c。$ w”     c = expr $c +1 完成

答案 6 :(得分:0)

简单方法:

进行文件测试并将一行“test”

然后执行:

 cat test >> test
一分钟后

ctrl + c将导致大量的千兆字节:)

答案 7 :(得分:0)

可能

dd if=/dev/zero of=/dummy10MBfile bs=1M count=10