节点js删除目录中的旧文件

我想删除一些目录中的文件达到一定的限制(例如,如果文件数量超过20删除文件)

如果可以执行任何自动化操作来删除这些文件,那就太好了。

详细:在我的情况下,有一个上传目录,我上传的图像。 对于每个新图像,都会创build一个目录,并将图像保存在目录中。 所以我想保留一些新创build或最近使用的目录,并在一定的限制之后删除其他目录(例如达到20个目录之后)。 在创build新图像时,它会检查限制,如果超出最大限制,它将删除未使用的目录。

注意:目录不是空的。

我怎样才能做到这一点使用Node.js

任何帮助将是可观的。

你可以考虑设置一个kue任务: https : //github.com/learnboost/kue

Kue(或者在它上面的一个小包装/ mod)很可能成为我们下一步计划工作的核心。

最广泛使用的技术将是有一个可以删除文件夹中的文件的API。 看一眼

 fs.unlink 

你可以在这里获得更多的细节

一旦你有了这个API,最好每个月都有一个cron调用这个API。 看一眼

 crontab -e 

如果您在Linux服务器上运行Node,则可以使用exec模块来执行Linux命令。 例如,下面是一个用来移动旧日志文件的函数:

 var exec = require('child_process').exec; exec('mv ' + __dirname + '/log/*.log ' + __dirname + '/log/archive', function(err, stdout, stderr) { if (err) { console.log('Error archiving log files: ' + stderr); } else { console.log('Log files archived to ' + __dirname + '/log/archive'); } }); 

你可以使用任何Linux命令 – 所以你可以使用这种方法来删除文件。

我在node.js中创build一个“cronjob”函数来删除文件夹中的文件(注意子文件夹将被忽略)

用法:

 // keep only 5 newest files in `logs` folder watchAndRemoveOldFiles('logs', 5, function (err, removeFiles) { console.log('These files has been remove:', removeFiles); }); 

完整的代码( 你需要npm install async运行代码 ):

 var fs = require('fs'); var path = require('path'); var async = require('async'); function findAndRemoveOldFiles(inputDir, keepCount, callback) { if(!callback) { callback = function (err, removeFiles) { // default callback: doing nothing }; }; fs.readdir(inputDir, function (err, files) { if(err) { return callback(err); } fileNames = files.map(function (fileName) { return path.join(inputDir, fileName); }); async.map(fileNames, function (fileName, cb) { fs.stat(fileName, function (err, stat) { if(err) { return cb(err); }; cb(null, { name: fileName, isFile: stat.isFile(), time: stat.mtime, }); }); }, function (err, files) { if(err) { return callback(err); }; files = files.filter(function (file) { return file.isFile; }) files.sort(function (filea, fileb) { return filea.time < fileb.time; }); files = files.slice(keepCount); async.map(files, function (file, cb) { fs.unlink(file.name, function (err) { if(err) { return cb(err); }; cb(null, file.name); }); }, function (err, removedFiles) { if(err) { return callback(err); } callback(null, removedFiles); }); }); }); } function watchAndRemoveOldFiles(inputDir, keepCount, callback) { findAndRemoveOldFiles(inputDir, keepCount, callback); fs.watch(inputDir, function () { findAndRemoveOldFiles(inputDir, keepCount, callback); }); } // USAGE: watch and remove old files, keep only 5 newest files watchAndRemoveOldFiles('log', 5, function (err, removeFiles) { console.log('These files has been remove:', removeFiles); });