用node编写脚本扫描文件夹下全部文件并分类整理

前言

受疫情影响最近一直在家办公,遇到一个问题,同事原本须要将一些文件按照清单提供给我,可是看了一下发现缺乏不少,因此我须要对照清单将当前缺乏的文件名提供出来给他,让他把缺乏的补给我。
可是因为文件有不少因此没办法一一对比,因此想用node写个脚原本作这件事,说干就干。
ps:若是要看用node扫描文件夹(不一样目录层级)下全部文件请直接看第5步。node

解决过程

一、先准备文件,将现有文件放在一个文件夹下,因为全部的文件分别在不一样的目录下,因此一下子读取的时候可能会有点麻烦。
1582641152(1).jpg
二、而后将文件清单整理出来并存在LIST中。image.png
三、咱们其实并不须要key,只须要使用后面的地址,因此Object.values()方法将后边的value值取出来存到数组中,执行如下看结果:json

let apiList = Object.values(ENV);
console.log(apiList)

image.png
四、获取到的地址中,以https开头的咱们不须要,咱们把以http开头的文件读取出来存到数组中:api

let http = []
  for(let item of apiList) {
    if(item.substr(0, 5) == "https") {
        https.push(item)
    }else{
        http.push(item)
    }
  }

image.png
五、接下来进入最关键的地方,咱们须要将文件夹下全部文件读取出来,可是文件存放的路径层级各不相同,因此咱们须要用递归调用的方式去获取。数组

const fs = require('fs')
  const basePath = './src/assets/dummyAPIResponse'
  var join = require('path').join;
  let fileList = []
  function getJsonFiles(jsonPath){
    let jsonFiles = [];
    function findJsonFile(path){
        let files = fs.readdirSync(path);
        files.forEach(function (item, index) {
            let fPath = join(path,item);
            let stat = fs.statSync(fPath);
            if(stat.isDirectory() === true) {
                findJsonFile(fPath);
            }
            if (stat.isFile() === true) { 
              jsonFiles.push(item);
            }
        });
    }
    findJsonFile(jsonPath);
    fileList = jsonFiles

  }
  getJsonFiles(basePath);
  console.log(fileList)

image.png
六、此时的咱们已经获得了全部的文件名字和名字清单,咱们须要先将两个用名字进行比较得出重复的名称列表(也就是如今存在的),而后再将已有的和全量名称列表去对比得出缺失的文件名。ui

let output = []
for(let item of fileList) {
    for(let httpItem of http) {
        if(httpItem.indexOf(item) !== -1) {
            output.push(httpItem)
        }
    }
}
function getArrDifference(arr1, arr2) {
    return arr1.concat(arr2).filter(function(v, i, arr) {
        return arr.indexOf(v) === arr.lastIndexOf(v);
    });
}
let result = getArrDifference(output,http)
console.log(result)

image.png
七、此时咱们的任务还差一点,咱们再建立个文件用node将数据写入进去便可。spa

fs.writeFileSync('./file/http.js', result, { encoding: "UTF-8" });

image.png

总结

简单的功能其实用到了很多关于node和js的知识,如读取文件名称和路径,对比数组等。这篇就先写这么多,之后慢慢写。最后贴出本篇全部代码方便你们参考。3d

let apiList = Object.values(ENV);
  let http = []
  for(let item of apiList) {
    if(item.substr(0, 5) != "https") {
      http.push(item)
    }
  }
  const fs = require('fs')
  const basePath = './src/assets/dummyAPIResponse'
  var join = require('path').join;
  let fileList = []
  function getJsonFiles(jsonPath){
    let jsonFiles = [];
    function findJsonFile(path){
        let files = fs.readdirSync(path);
        files.forEach(function (item, index) {
            let fPath = join(path,item);
            let stat = fs.statSync(fPath);
            if(stat.isDirectory() === true) {
                findJsonFile(fPath);
            }
            if (stat.isFile() === true) { 
              jsonFiles.push(item);
            }
        });
    }
    findJsonFile(jsonPath);
    fileList = jsonFiles

}
getJsonFiles(basePath);
let output = []
for(let item of fileList) {
    for(let httpItem of http) {
        if(httpItem.indexOf(item) !== -1) {
            output.push(httpItem)
        }
    }
}
function getArrDifference(arr1, arr2) {
  return arr1.concat(arr2).filter(function(v, i, arr) {
      return arr.indexOf(v) === arr.lastIndexOf(v);
  });
}
let result = getArrDifference(output,http)
console.log(result);
fs.writeFileSync('./file/http.js', result, { encoding: "UTF-8" });
相关文章
相关标签/搜索