2016-06-19 4 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のフォルダに子フォルダ名folderName1folderName2folderName3があるとします。 folderName1folderName2であり、次のように宣言すればそのファイルはすべて削除されません。

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を除外しません。 2番目のパラメータが定義されている限り、shouldDeleteはtrueを返します。 – vincentsty

+0

この 'deleteFolderRecursive( 'folderName1'、['folderName1'])'を試して、フォルダを削除することを確認してください。何かが間違っています –

+0

こんにちは、それは 'deleteFolderRecursive( 'folderName1'、['folderName1'])'を使ってフォルダを削除しません。私の現在のフォルダhierarychyは 'www/parentFolder/folderName1'のようになりますので、' deleteFolderRecursive( '../../ www/parentFolder'、['folderName1']) 'を呼び出しています。私は間違った方法でそれを使用しているが、親フォルダ全体が削除されているかわからない。 – vincentsty

関連する問題