Lua 执行命令行获取文件MD5值

Posted 一如年少模样

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lua 执行命令行获取文件MD5值相关的知识,希望对你有一定的参考价值。

出于项目收藏gif图片需求的查重问题,不得不找出gif图片的唯一性, 由于保存的图片名称是根据时间戳命名的,所以两张相同的图片发送再执行收藏功能时所获取到的图片名 ***.gif是不同的,没有可比性。 md5值是可以的。

看了下资料,在Lua中

os.execute可以执行dos命令,但是返回的是系统状态码,默认输出
io.popen()也可以执行dos命令,但是返回一个文件。eg:
local t = io.popen('svn help')
local a = t:read("*all")
--a返回一个字符串,内容是svn help的内容

如果想执行某命令或程序可选os.execute(),如果还想捕捉该执行结果可用io.popen()
eg:复制文件
os.execute("copy" .. originalPath .. "," .. backupPath)

那么接下来就看下windows下命令行查看文件md5

certutil -hashfile yourfilename.ext MD5



certutil -hashfile yourfilename.ext SHA1



certutil -hashfile yourfilename.ext SHA256

这样返回值是分行的,如下图所示:


因为我们就只想得到第二行的返回的md5值来作为是否收藏的依据,逐行获取我们所需要的,入库,遍历查询即可

方法如下:

--运行DOS命令,查找文件md5  
*--------------------
    fpath 为文件的绝对路径
-----------------------
function getFileMd5( fpath)

    local cmd = "certutil -hashfile "..fpath.." MD5"

    local t = io.popen(cmd)
    local i = 0
    local str_md5
    for line in t:lines() do
        --print("line"..line)  -- 这里就是每次取一行    
        i = i+1 
        if i == 2 then
           str_md5 = line
        end
    end

    return str_md5
end


--获取到文件的md5
local str = getFileMd5(tmpPath)   

以上是关于Lua 执行命令行获取文件MD5值的主要内容,如果未能解决你的问题,请参考以下文章

Windows下获取文件的md5码的方法

linux shell 命令获取字符串/文件的MD5值

获取文件的MD5

如何在ubuntu系统中验证系统文件的md5

如何在 LUA 中运行可执行文件并获取其返回值?

Windows命令行查看文件的MD5.md