NodeJS遍歷文件生產文件列表


功能需求:在工作中我們可能經常需要知道項目中靜態文件列表發布,一個一個去檢索寫,那就太苦逼了。

要想知道里面的文件列表是不是很蛋疼,可能我們也會有dos tree去獲取。

這里分享一下,通過node,知道文件路徑,並配置遠程路徑,直接copy,發布。

新建filelist.js 里面都有注釋,我就不哆嗦了.

var fs = require("fs");

//path模塊,可以生產相對和絕對路徑
var path = require("path");

//配置遠程路徑
var remotePath = "/resource/fd/promote/201507/qixi/";

//獲取當前目錄絕對路徑,這里resolve()不傳入參數
var filePath = path.resolve();

//讀取文件存儲數組
var fileArr = [];

//讀取文件目錄
fs.readdir(filePath,function(err,files){
    if(err){
        console.log(err);
        return;
    }
    var count = files.length;
    //console.log(files);
    var results = {};
    files.forEach(function(filename){
        
        //filePath+"/"+filename不能用/直接連接,Unix系統是”/“,Windows系統是”\“
        fs.stat(path.join(filePath,filename),function(err, stats){
            if (err) throw err;
            //文件
            if(stats.isFile()){
                if(getdir(filename) == 'html'){
                    var newUrl=remotePath+filename;
                    fileArr.push(newUrl);
                    writeFile(fileArr);
                }
                // (getdir(filename) == 'html')&&(fileArr.push(filename);writeFile(newUrl));
            //    console.log("%s is file", filename);
            }else if(stats.isDirectory()){
                // console.log("%s is a directory文件目錄", filename);
         //返回指定文件名的擴展名稱 
         //console.log(path.extname("pp/index.html"));

if(filename == 'css' || filename == 'images'){
//var readurl = filePath+'/'+filename; //filePath+"/"+filename不能用/直接連接,Unix系統是”/“,Windows系統是”\“ // console.log(path.join(filePath,filename));
                         var name = filename; readFile(path.join(filePath,filename),name); } } }); }); }); //獲取后綴名
function getdir(url){ var arr = url.split('.'); var len = arr.length; return arr[len-1]; } //獲取文件數組
function readFile(readurl,name){ console.log(name); var name = name; fs.readdir(readurl,function(err,files){ if(err){console.log(err);return;} files.forEach(function(filename){ // console.log(path.join(readurl,filename));
 fs.stat(path.join(readurl,filename),function(err, stats){ if (err) throw err; //是文件
                if(stats.isFile()){ var newUrl=remotePath+name+'/'+filename; fileArr.push(newUrl); writeFile(fileArr) //是子目錄
                }else if(stats.isDirectory()){ var dirName = filename; readFile(path.join(readurl,filename),name+'/'+dirName); //利用arguments.callee(path.join())這種形式利用自身函數,會報錯 //arguments.callee(path.join(readurl,filename),name+'/'+dirName);
 } }); }); }); } // 寫入到filelisttxt文件
function writeFile(data){ var data = data.join("\n"); fs.writeFile(filePath+"/"+"filelist.txt",data+'\n',function(err){ if(err) throw err; console.log("寫入成功"); }); }

當我們執行

node  flielist.js

就會生產filelist.txt,文件里面就包含了我們想要的路徑。

 

 

有時,我們通常遇到刪除不了的文件,由於文件縱深太長導致 rm _rf也刪不了,但是我們通過nodejs可以辦到:

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

deleteFolderRecursive = function(url) {
    var files = [];
    //判斷給定的路徑是否存在
    if( fs.existsSync(url) ) {
    
        //返回文件和子目錄的數組
        files = fs.readdirSync(url);
        
        files.forEach(function(file,index){
           // var curPath = url + "/" + file;
            var curPath = path.join(url,file);
            //fs.statSync同步讀取文件夾文件,如果是文件夾,在重復觸發函數
            if(fs.statSync(curPath).isDirectory()) { // recurse
                deleteFolderRecursive(curPath);
                
            // 是文件delete file    
            } else { 
                fs.unlinkSync(curPath);
            }
        });
        fs.rmdirSync(url);
    }else{
        console.log("給定的路徑不存在,請給出正確的路徑");
    }
};

deleteFolderRecursive("./grunt");

 

參考資料:

nodejs實現遍歷文件夾並統計文件大小  http://nodeclass.com/articles/911572


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM