zl程序教程

您现在的位置是:首页 >  其他

当前栏目

【shell脚本】如何快速生成一个固定大小且内容随机的文件?

文件shell 如何 快速 一个 生成 脚本 内容
2023-06-13 09:15:42 时间

        笔者最近在项目自测试中,有个小小的需求:需要在原始文件的后面,追加一个固定大小的文件,组成一个更大的文件做测试,并且为了保证测试结果的准确性和随机性,这个固定大小的文件还必须是内容随机的。经过学习和整理,发现在linux命令行有个非常有用的命令dd就可以解决此问题。

       为了今后也能快速使用这个功能,我把这个功能的实现,用shell脚本文件的形式编写出来,需要生成文件的时候只需要在命令行里,按照约定的命令行参数输入对应的配置信息,就可以生成所需的文件,方便、快捷,高效工作就从此刻开始。

       废话不说,直接上脚本内容:

#########################################################################
# File Name: random-file.sh
# Author : szullc
# Created Time: 2018年12月03日 星期一 11时28分23秒
#########################################################################
#!/bin/bash -e

out_file_name=$1
file_size=$2
size_unit=$3
tmp_out_file_name=$out_file_name.tmp

function check_input_param()
{
    if [[ "a" == "a"$out_file_name || "a" == "a"$file_size || "a" == "a"$size_unit ]]; then
        echo "Error param input !"
        echo "Type in like this: $0 [out-file-name] [file-szie] [size-unit]"
        echo "param list as follow:"
        echo "[out-file-name]: input your output file name, Relative path and absolute path are OK."
        echo "[file-size]: The file size of output file, which must be an integer."
        echo "[size-unit]: Only support K/M/G. They mean xxxKB/xxxMB/xxxGB."
        exit
    fi
}

function check_file_size_if_integer()
{
    if [ -n "$file_size" -a "$file_size" = "${file_size//[^0-9]/}" ]; then
        echo "file_size=$file_size"
    else
        echo "[file-size] error: The file size of output file, which must be an integer."
    exit
    fi
}

function check_size_unit()
{
    if [[ "K" != $size_unit && "M" != $size_unit && "G" != $size_unit ]]; then
        echo "[size-unit] error: Only support K/M/G. They mean xxxKB/xxxMB/xxxGB."
        exit
    fi
}

function create_random_file()
{
    dd if=/dev/urandom of=$tmp_out_file_name bs=1$size_unit count=$file_size conv=notrunc
    mv $tmp_out_file_name $out_file_name
}


check_input_param
check_file_size_if_integer
check_size_unit
create_random_file

       脚本内容通俗易懂,稍微有点shell脚本的知识就可以看的明白;它的使用方法也非常简单,在需要在linux命令行环境下,先确保这个shell脚本文件有x可执行属性,然后输入:

  • ./random-file.sh my-random.bin 1024 K 

       按下回车,它就会自动在当前目录生成一个1024KB大小,名字为my-random.bin的文件,且文件的内容是随机的。类似地,输入:

  • ./random-file.sh my-random2.bin 1234 M

       按下回车,它就可以自动生成一个大小为1234MB,名字为my-random2.bin的随机文件。如果你的硬盘够猛,你想完一po大的,你也可以试下:

  •  ./random-file.sh my-random.txt 12340 G

       按下回车,估计你要等个几十分钟,甚至几个小时,搞不好几十个小时了。。。具体多久,笔者也没有胆量去试一试,要不你来试试?

       【值得注意的是】,该脚本仅支持xxxKB、xxxMB、xxxGB大小的文件生成;如果你想生成更小的文件(比如xxxB),或者更大的文件(比如1024TB),那么你就需要自己修改脚本实现了;毕竟【为我所用】才是程序猿应该遵守的职业操守。

       因时间匆忙,笔者未来得及将生成文件的记录截图附上,望读者自行验证;若有不明白的地方,或者运行操作出错的,欢迎在评论席回复,笔者很乐意为你解答。


       经笔者自测试,生成文件用于测试完全没有问题;在日常工作使用脚本确实是大大提升了我们的工作效率,希望后续可以分享更多实用的、高效的脚本操作给大家,敬请关注。谢谢。