26

我想在 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 下它可能会快得多,但脚本显然不是最佳的。

你能建议我一种更快更好的方法来生成给定大小的虚拟(二进制)文件吗?

4

8 回答 8

51

你可以试试head命令:

$ head -c 100000 /dev/urandom >dummy
于 2012-03-21T07:45:52.803 回答
12

您可以为此目的使用dd :

dd if=/dev/urandom bs=1024 count=5 of=dummy
  • 如果:= 在文件中
  • of:= 输出文件
  • 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 

这里有3点需要注意:

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

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

for x in {0..100000}
do
    echo a 
done >> dummy.zip 
于 2012-03-21T08:02:52.220 回答
10

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

yes 123456789 | head -10000 > dummy.file
于 2012-03-21T13:21:44.720 回答
6

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

fallocate -l 100KB dummy_100KB_file

有关详细信息,请参阅“在 Linux 系统上快速创建大文件? ”。

于 2015-04-03T14:36:43.160 回答
5
$ openssl rand -out random.tmp 1000000
于 2015-03-11T13:25:42.190 回答
0

echo "从文件中按顺序打印单词" c=1 for w in cat file do echo "$c . $w" c = expr $c +1 done

于 2013-06-14T17:09:33.673 回答
0

简单的方法:

制作文件测试并放一行“测试”

然后执行:

 cat test >> test

一分钟后 ctrl+c 将产生大量 GB :)

于 2017-02-03T17:35:29.443 回答
0

可能

dd if=/dev/zero of=/dummy10MBfile bs=1M count=10
于 2018-09-03T13:02:58.300 回答