在节点中,删除所有超过一个小时的文件?

我想删除任何超过一个小时的文件。 这是为了自动清理tmp上传目录。

这是我的代码:

fs.readdir( dirPath, function( err, files ) { if ( err ) return console.log( err ); files.forEach(function( file ) { var filePath = dirPath + file; fs.stat( filePath, function( err, stat ) { if ( err ) return console.log( err ); var livesUntil = new Date(); livesUntil.setHours(livesUntil.getHours() - 1); if ( stat.ctime < livesUntil ) { fs.unlink( filePath, function( err ) { if ( err ) return console.log( err ); }); } }); }); }); 

但是,这只是删除目录中的所有内容,而不pipe它是否在一个小时之前上传。

我误解如何检查节点中的文件的年龄?

我正在使用rimrafrecursion删除任何超过一个小时的文件/文件夹。

根据文档 ,你应该使用ctime Date对象实例上的getTime()来比较。

 var uploadsDir = __dirname + '/uploads'; fs.readdir(uploadsDir, function(err, files) { files.forEach(function(file, index) { fs.stat(path.join(uploadsDir, file), function(err, stat) { var endTime, now; if (err) { return console.error(err); } now = new Date().getTime(); endTime = new Date(stat.ctime).getTime() + 3600000; if (now > endTime) { return rimraf(path.join(uploadsDir, file), function(err) { if (err) { return console.error(err); } console.log('successfully deleted'); }); } }); }); }); 

我已经使用find-remove类似的用例。

根据文档和你正在做什么,代码将是:

 var findRemoveSync = require('find-remove'); findRemoveSync(__dirname + '/uploads', {age: {seconds: 3600}}); 

我实际上每6分钟运行一次,并删除大于1小时的文件,方法是:

 setInterval(findRemoveSync.bind(this,__dirname + '/uploads', {age: {seconds: 3600}}), 360000) 

关于如何使用find-remove来清理/uploads文件夹,请看这个例子。

它看起来像你比较无论“stat.ctime”是整个date对象。

 if ( stat.ctime < livesUntil ) { 

不应该读取:

 if ( stat.ctime < livesUntil.getHours() ) {