我想在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下可能要快得多,但脚本显然不是最佳的。
你能否建议我更快更好地生成给定大小的虚拟(二进制)文件?
答案 0 :(得分:45)
您可以尝试head
命令:
$ head -c 100000 /dev/urandom >dummy
答案 1 :(得分:11)
您可以将 dd 用于此目的:
dd if=/dev/urandom bs=1024 count=5 of=dummy
注意,
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
以下三点需要注意:
但是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