打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
怎样生成固定文件大小?

公司测试项目有时会需要用到特定大小的文件,比如说100MB,当然你完全可以去下载、拷贝,借助于winrar这样的分割工具去生成一个100M的文件大小。但是有没有更自动点的工具呢?

我在网上找了下大概有这么几个思路:

1. dd命令

Linux下的dd命令很是强大,我刚开始玩Linux的时候就知道的。可以这样使用dd命令来创建指定大小的文件:

生成固定大小文件

dd if=/dev/zero of=/home/bluestorm/100M.img bs=1M count=1024(生成一个100M的文件,文件名为100M.img)

使用的格式如下:(从sina.html文件读取1024Byte字节生成一个文本文件mm0.txt)

“dd if=/home/sina.html of=/home/mms0.txt bs=1024 count=1”

if的参数是输入文件是新浪的主页,

of的参数是要生成的文件,

bs的参数是每次读入的block大小,这里就设为要生成的文件大小,

count的参数是读取的block个数,这里就设为1。

通过bs和count组合就可以生成指定大小的文件,根据if输入源的不同也内容也可以随机。

2. 编程

方法是写入文件流,并且在代码中给定串的大小(Nbyte)。当然,这样的话java, C++, C应该都可以做到。

3. 脚本

直接写一个windows下的批处理文件,或者用python这样的脚本语言写一个文件生成脚本。

比如:ping -l [数据包大小 最大65535] ip

使用Shell/Python生成一个内容不同但大小固定的文件

    在测试一个上传场景时,需要保证每次拿到的文件内容不同,且脚本中需要用到文件的大小。

    为了保证测试脚本足够简单,不希望每次在使用文件时还要去获取一下文件大小。

    为了避免读取文件是文件大小被修改,尽量不要使用追加或删除的操作。

    那么需求产生了:在保证文件大小一致的前提下来修改文件内容。

    使用Shell脚本来完成此工作,生成文件的脚本:#!/bin/bash

# 文件名:create_file.sh

# 生成一定大小的文件

testfile=/data/share/filetest

dd if=/dev/zero of=$testfile ibs=1000 obs=1000 count=100

echo -en "\n"$(uuidgen)"\n" >> $testfile

修改文件内容的方法:#!/bin/bash

# 文件名:modify_file.sh

# 将文件末行替换

while(test 1 -eq 1)

do

    sleep 1

    sed -i '$c\'`uuidgen` /data/share/filetest

done

    OK,简单几行脚本就把事情的核心事务给解决了,剩下就是定时执行脚本即可了nohup ./modify_file.sh > /dev/null & 。

    经测试,满足文件内容不同而文件大小固定的要求

?

    让人比较郁闷的一点是Shell时间最高只能精确到秒,要文件更新更快,要么使用另一种语言来调用上述的Shell脚本,要么就直接用第三方脚本重新实现了。

    这里提供一个Python版本:

#!/usr/bin/env python

import sys,os

import time

import uuid

def _gen_uuid():

    u = uuid.uuid4()

    return str(u)

def main(filename, filesize, change_per_second):

    f = open(filename, "wb")

    uuid = _gen_uuid()

    padding = "0" * (filesize-len(uuid) -1) + "\n"

    padding_length = len(padding)

    f.write(padding)

    f.write(uuid)

    f.flush()

    interval = 1.0 / change_per_second

    while True:

        start = time.time()

        f.seek(padding_length)

        uuid = _gen_uuid()

        f.write(uuid)

        f.flush()

        elapse = time.time() - start

        sleep_time = interval - elapse

        if sleep_time < 0:

            sleep_time = 0

        time.sleep(sleep_time)

            f.close()

if __name__ == "__main__":

    if len(sys.argv) != 4:

        print "Usage: python make_uuid_file.py /path/to/file filesize change_per_second"

        sys.exit(1)

    filename = sys.argv[1]

    filesize = int(sys.argv[2])

    change_per_second = int(sys.argv[3])

    if filesize < 36:

        print "filesize must > 36"

        sys.exit(1)

    main(filename, filesize, change_per_second)

    可以优化的是把文件或共享目录放到内存(/dev/shm或新挂一块)里,然后使用samba共享之。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
使用Jquery判断上传文件的大小
python获取程序执行文件路径方法
干货教程:Linux 系统的备份怎么恢复
修改 apache 上传文件大小限制
python编写shell脚本详细讲解
php上传大文件失败的解决办法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服