use*_*947 23 javascript node.js
我想删除超过一小时的所有文件.这是为了自动清理tmp uploads目录.
这是我的代码:
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 );
});
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
但是,这只会删除目录中的所有内容,无论它是否在一小时前上传.
我是否误解了如何检查Node中文件的年龄?
Ger*_*sio 26
我已经将find-remove用于类似的用例.
根据文档和您要做的事情,代码将是:
var findRemoveSync = require('find-remove');
findRemoveSync(__dirname + '/uploads', {age: {seconds: 3600}});
Run Code Online (Sandbox Code Playgroud)
我实际上每6分钟运行一次并删除超过1小时的文件:
setInterval(findRemoveSync.bind(this,__dirname + '/uploads', {age: {seconds: 3600}}), 360000)
Run Code Online (Sandbox Code Playgroud)
请参阅此示例,了解我如何使用find-remove来清理/uploads文件夹.
cba*_*rri 19
我使用rimraf递归删除任何超过一小时的文件/文件夹.
根据文档,您应该在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');
});
}
});
});
});
Run Code Online (Sandbox Code Playgroud)
简单的递归解决方案仅删除所有文件!dirs 每 5 小时运行一次,删除 1 天的旧文件
const fs = require('fs');
const path = require('path');
setInterval(function() {
walkDir('./tmpimages/', function(filePath) {
fs.stat(filePath, function(err, stat) {
var now = new Date().getTime();
var endTime = new Date(stat.mtime).getTime() + 86400000; // 1days in miliseconds
if (err) { return console.error(err); }
if (now > endTime) {
//console.log('DEL:', filePath);
return fs.unlink(filePath, function(err) {
if (err) return console.error(err);
});
}
})
});
}, 18000000); // every 5 hours
function walkDir(dir, callback) {
fs.readdirSync(dir).forEach( f => {
let dirPath = path.join(dir, f);
let isDirectory = fs.statSync(dirPath).isDirectory();
isDirectory ?
walkDir(dirPath, callback) : callback(path.join(dir, f));
});
};
Run Code Online (Sandbox Code Playgroud)