我想在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)
注意
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)
这里有三点需要注意:
但是仍然有一个更简单的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)
如果您的文件系统是 ext4、btrfs、xfs 或 ocfs2,并且您不关心内容,则可以使用fallocate. 如果您需要大文件,这是最快的方法。
fallocate -l 100KB dummy_100KB_file
Run Code Online (Sandbox Code Playgroud)
详情请参阅“在 Linux 系统上快速创建大文件? ”。