2016-06-19 212 views
0

以下代码可帮助递归删除文件夹。它删除整个文件夹。递归删除文件夹但排除命名文件夹

var deleteFolderRecursive = function(removePath) { 
    if(fs.existsSync(removePath)) { 
    fs.readdirSync(removePath).forEach(function(file,index){ 
     var curPath = path.join(removePath, file); 
     if(fs.lstatSync(curPath).isDirectory()) { 
     deleteFolderRecursive(curPath); 
     } else { // delete file 
     fs.unlinkSync(curPath); 
     } 
    }); 
    fs.rmdirSync(removePath); 
    } 
}; 

我怎么能扩展它来删除文件夹递归,而是以文件夹名称不包括一些文件夹。假设名称为parentFolder的文件夹具有子文件夹名称folderName1,folderName2folderName3folderName1folderName2及其所有文件将不会被删除,如果我以下面的方式声明。

var deleteFolderRecursive = function (removePath, excludeDirArray) { 
    // code here 
} 
deleteFolderRecursive(path, ['folderName1', 'folderName2']); 
+0

你想在排除列表目录被完全忽略,或者也走过有文件/在其中目录还删除,如果不排除? – Nicholas

回答

1
var deleteFolderRecursive = function(removePath, exclusive) { 
    var shouldDelete = function(pathUrl) { 
    if(exclusive && exclusive.length){ 
     return exclusive.indexOf(pathUrl) === -1; 
    } 
    return true; 
    } 

    if(fs.existsSync(removePath) && shouldDelete(removePath)) { // <-- use it here 
    fs.readdirSync(removePath).forEach(function(file,index){ 
     var curPath = path.join(removePath, file); 
     if(fs.lstatSync(curPath).isDirectory()) { 
     deleteFolderRecursive(curPath); 
     } else { // delete file 
     if(shouldDelete(file)) { // <-- optionally use it here 
      fs.unlinkSync(curPath); // if you want also files to not be deleted 
     } 
     } 
    }); 
    fs.rmdirSync(removePath); 
    } 
}; 

deleteFolderRecursive(path, ['folderName1', 'folderName1', 'myFile.txt']); // <-- also file 
+0

嗨,我通过使用'deleteFolderRecursive(path,['folderName1'])',但它仍然导致整个文件夹被删除。它不排除folderName1。在我看来,只要第二个参数被定义,shouldDelete将返回true – vincentsty

+0

试试这个'deleteFolderRecursive('folderName1',['folderName1'])'并确认它删除了文件夹,它不应该删除,如果它 - 错误的东西 –

+0

嗨它不删除文件夹通过使用'deleteFolderRecursive('folderName1',['folderName1'])''。我当前的文件夹hierarychy是这样的:'www/parentFolder/folderName1',所以我所做的就是调用'deleteFolderRecursive('../../ www/parentFolder',['folderName1'])''。不知道我是否以错误的方式使用它,但整个父文件夹被删除。 – vincentsty