node.js实现 生成指定路径下所有文件的md5值

node.js实现

const fs = require('fs')
const FileQueue = require('filequeue') //是同文件队列解决EMFILE: too many open files, open
const fs1 = new FileQueue(100)
const path = require('path')
const crypto = require('crypto')
const date = new Date()
const toLocaleDate = date.toLocaleDateString() //当前日期
const filesMd5Path = `../file/files-md5/${toLocaleDate}.md` //生成的表路径
const filterDir = [
  'node_modules',
  '.history',
  '.idea',
  '.git',
  '.vscode',
  'logs',
] //要过滤掉的文件夹
const paths = path.join(__dirname, '..') //要生成md5的文件路径
let num = 0
getFiles(paths)
async function getFiles(dir) {
  const stat = fs.statSync(dir)
  if (stat.isDirectory()) {
    //判断是不是目录
    const pathObj = path.parse(dir)
    if (filterDir.includes(pathObj.base)) return false //过滤掉
    //if (pathObj.base.indexOf('.') === 0) return false //如果以点开头的就忽略掉
    fs1.readdir(dir, function (err, dirs) {
      if (err) return false
      dirs.forEach((value) => {
        getFiles(path.join(dir, value))
      })
    }) //读取目录
  } else if (stat.isFile()) {
    //判断是不是文件
    const obj = await readBigFile(dir) //大文件
    //console.log(obj)
    appendFile(obj)
  }
}
/**
 * 获取大文件md5
 * @param {*} dir
 */
function readBigFile(dir) {
  return new Promise((resolve) => {
    const stream = fs.createReadStream(dir)
    const hash = crypto.createHash('md5')
    stream.on('data', (chunk) => {
      hash.update(chunk, 'utf8')
    })
    stream.on('end', () => {
      const md5Sum = hash.digest('hex')
      const obj = { dir, md5Sum }
      resolve(obj)
    })
  })
}
/**
 * 追加文件写入
 * @param {*} obj
 */
function appendFile(obj) {
  let str = ``
  let dir = obj.dir
  if (path.sep === '\\') {
    dir = dir.replace(/\\/g, '\\\\') //解决linux 路径\.在markdown显示.的问题
  }
  if (num === 0) {
    str += `
  #### 生成时间:${new Date()}
  |ID|路径|md5值|
  |:---:|----|----|
  `
  }
  num += 1
  str += `|${num}|${dir}|${obj.md5Sum}|\n`
  fs.appendFile(filesMd5Path, str, (err) => {
    if (err) return err
    console.log(`表内容写入文件成功,内容${str}`)
  })
}

在这里插入图片描述
此外平台生成文件md5值

linux 平台

md5sum 文件名

window 平台

certutil -hashfile 文件绝对路径 md5
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只倒霉的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值