檔案拷貝小工具(node)
阿新 • • 發佈:2019-01-01
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檔名