在bash中生成虚拟文件

jab*_*bal 24 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;
Run Code Online (Sandbox Code Playgroud)

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

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

kev*_*kev 46

你可以尝试head命令:

$ head -c 100000 /dev/urandom >dummy
Run Code Online (Sandbox Code Playgroud)


use*_*own 11

您可以将dd用于此目的:

dd if=/dev/urandom bs=1024 count=5 of=dummy
Run Code Online (Sandbox Code Playgroud)
  • if:= in file
  • of:= out file
  • bs:=块大小

注意

 x=`expr $x + 1`;
Run Code Online (Sandbox Code Playgroud)

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

 x=((x+1)) 
Run Code Online (Sandbox Code Playgroud)

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

x=0;
while [ $x -lt 100000 ];
do echo a >> dummy.zip;
  x=`expr $x + 1`;
done;
Run Code Online (Sandbox Code Playgroud)

相比之下:

for  ((x=0; x<100000; ++x))
do
    echo a 
done >> dummy.zip 
Run Code Online (Sandbox Code Playgroud)

这里有三点需要注意:

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

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

for x in {0..100000}
do
    echo a 
done >> dummy.zip 
Run Code Online (Sandbox Code Playgroud)


gle*_*man 10

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

yes 123456789 | head -10000 > dummy.file
Run Code Online (Sandbox Code Playgroud)


miv*_*ivk 6

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

fallocate -l 100KB dummy_100KB_file
Run Code Online (Sandbox Code Playgroud)

详情请参阅“在 Linux 系统上快速创建大文件? ”。


vba*_*osh 5

$ openssl rand -out random.tmp 1000000
Run Code Online (Sandbox Code Playgroud)