我想刪除給定目錄內的所有文件夾和子文件夾,如果它們只包含文件夾和文件。有沒有簡單的方法來做到這一點?Gulp - 遞歸刪除空文件夾
我發現了什麼至今:
- https://www.npmjs.com/package/gulp-recursive-folder
- https://www.npmjs.com/package/gulp-count
- https://www.npmjs.com/package/gulp-path
我想刪除給定目錄內的所有文件夾和子文件夾,如果它們只包含文件夾和文件。有沒有簡單的方法來做到這一點?Gulp - 遞歸刪除空文件夾
我發現了什麼至今:
您可以使用delete-empty
:
gulp.task('delete-empty-directories', function() {
deleteEmpty.sync('foo/');
});
此遞歸刪除以下foo/
所有空文件夾。
這裏有一個粗略的開始,所以你只需要循環遞歸我猜。
var modules = {
gulp : require('gulp'),
fs : require('fs'),
path : require('path'),
del : require('del'),
map : require('map-stream')
};
modules.gulp.task('folder-delete', function() {
// get folder list inside of the dir passed in
function getFolders(dir) {
return modules.fs.readdirSync(dir)
.filter(function(file) {
return modules.fs.statSync(modules.path.join(dir, file)).isDirectory();
});
}
var dir = '../src/', // (update with your path to the root folder)
folders = getFolders(dir),
hasFile = 0;
var folderMap = folders.map(function(folder) {
hasFile = 0; // reset for each folder
return modules.gulp.src(dir + folder + '/**/*')
.pipe(modules.map(function(file, cb) {
hasFile = 1;
cb(null, file);
}))
.on('end', function() {
console.log(hasFile, ' - ', folder);
if (!hasFile) {
modules.del([dir + folder], { force: true }).then(function() {
console.log('Deleted ' + dir + folder);
});
}
})
});
return folderMap;
});
基本上,這是設置在目錄../src/,在該目錄的根得到的文件夾,然後運行下這些目錄中的src。然後它使用map來查看是否有文件添加到流中,然後更新變量(如果有的話)。任務完成後,如果變量尚未更新,則會刪除該文件夾。如上所述,您可能只需循環遍歷遞歸目錄(或者您可以使用您提到的其中一個插件)。
Thx。我會先嚐試「Sven Schoenung」的解決方案,因爲我更喜歡更多的依賴項而不是更多的代碼。 – Sailcomp
沒問題。我有心情寫出來。讓我們知道它是否適合你! :) – JSess