1. 程式人生 > >檔案拷貝小工具(node)

檔案拷貝小工具(node)

var fs = require('fs');
var path = require('path');

//注:路徑必須都是絕對路勁
//基礎目錄(源目錄)
var basePath = path.resolve('E:\\基礎專案\\HTMLandCSS_Project\\react-learn-demo');

//目標目錄
var targetPath = path.resolve('E:\\開發資料\\【99】程式設計資料\\【02】前端資料\\【02】前端筆記\\【06】React\\【02】React程式碼\\react-learn-demo');

//需要過濾的資料夾
var filterDir = ['node_modules','.idea','.git']

//需要過濾的檔案
var filterFile = ['.gitignore']

//開始拷貝
fileDisplay(basePath,filterDir,filterFile);

//遍歷檔案並拷貝
function fileDisplay(filePath,filterDir){
  //根據檔案路徑讀取檔案,返回檔案列表
  fs.readdir(filePath,function(err,files){
    if(err){
      console.warn(err)
    }else{
      //遍歷讀取到的檔案列表
      files.forEach(function(filename){
        //獲取當前檔案的絕對路徑
        var filedir = path.join(filePath,filename);
        //根據檔案路徑獲取檔案資訊,返回一個fs.Stats物件
        fs.stat(filedir,function(eror,stats){
          if(eror){
            console.warn('獲取檔案stats失敗');
          }else{
            var isFile = stats.isFile();//是檔案
            var isDir = stats.isDirectory();//是資料夾
            if(isFile){
              //獲取目標目錄
              pathdir = filedir.replace(basePath,targetPath)
              //獲取檔名
              pathEnd = pathdir.split("\\")[pathdir.split("\\").length -1]
              //過濾不需要的檔案
              flag = 1
              for(i=0;i<filterFile.length;i++){
                if (pathEnd === filterFile[i]){
                  flag = 0
                  break
                }
              }
              if(flag){
                //建立資料夾
                createDir(pathdir.replace(pathEnd,""))
                //複製檔案
                copeFile(filedir,pathdir)
              }
            }
            if(isDir){
              fileEnd = filedir.split("\\")[filedir.split("\\").length-1]
              //過濾不需要的資料夾
              flag = 1
              for(i=0;i<filterDir.length;i++){
                if (fileEnd === filterDir[i]){
                  flag = 0
                  break
                }
              }
              if(flag){
                //遞迴,如果是資料夾,遍歷該資料夾下面的檔案
                fileDisplay(filedir, filterDir, filterFile);
              }
            }
          }
        })
      });
    }
  });
}

//建立目錄
function createDir(dirname) {
  if (fs.existsSync(dirname)) {
    return true;
  } else {
    if (createDir(path.dirname(dirname))) {
      fs.mkdirSync(dirname);
      return true;
    }
  }
}

//拷貝檔案
function copeFile(filePath,targetPath) {
  fs.copyFile(filePath, targetPath, (err) => {
    if (!err)
      console.log(targetPath);
  });
}

使用 node js檔名