用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" });
相關文章
相關標籤/搜索