我希望在达到某些限制后删除目录中的某些文件。(例如,如果文件数超过20,则删除文件)
如果可以自动删除这些文件,那就太棒了。
详细信息: 在我的情况下,有一个上传目录,我正在上传图像。对于每个新图像,将创建一个目录,并且该图像位于该目录中。因此,我希望保留一些新创建或最近使用的目录,并在某个限制之后删除其他目录(例如,在达到20个目录之后)。在创建新图像时,它会检查限制,如果超过最大目录限制,它将删除未使用的目录。
注意:目录不为空。
我如何使用Node.js
来做到这一点任何帮助都会很明显。
答案 0 :(得分:3)
答案 1 :(得分:2)
如果您在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命令 - 因此您也可以使用此方法删除文件。
答案 2 :(得分:2)
我在node.js中创建了一个“cronjob”函数来删除文件夹中的文件(注意子文件夹将被忽略)
<强> USAGE:强>
// 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);
});
答案 3 :(得分:0)
你可以考虑设置一个kue任务: https://github.com/learnboost/kue
Kue(或其上面的一个轻微的包装/ mod)很可能成为我们预定工作的核心。