如何在目录中归档日志文件时排除当前日志文件
how to exclude current log file while archiving log files inside a directory
我必须归档一个存在日志文件的目录(文件名的格式为 i.e 2017-12-06.log
)。我必须归档除 2017-12-06.log
之外的所有文件。
我有一个日志目录,其中包含所有日志文件和一个脚本 create-zip.js
。当我 运行 使用 node create-zip.js
跟随脚本时,它会创建目录 /archive/<year>/<month_name>
并保存在 logs.zip
文件夹中。
一切都很好,除了我提取 logs.zip
时,我的存档日志文件位于 /archive/<year>/<month_name>/home/hotam/nodejs_archive_example/logs
中,但我希望这些文件位于 /archive/<year>/<month_name>
中。我用谷歌搜索了很多但找不到解决方案。提前致谢。
我有以下脚本(create-zip.js
):
'use strict';
var fs = require('fs'),
path = require('path'),
archiver = require('archiver'),
currDate = new Date(),
year = currDate.getFullYear(),
month = currDate.toLocaleString("en-us", { month: "long" }),
dir = path.join(__dirname + '/archive/' + year + '/' + month),
ignoredFile = currDate.getFullYear()+'-'+('0' + (currDate.getMonth() + 1)).slice(-2)+'-'+('0' + currDate.getDate()).slice(-2)+'.log';
//Function to create directories recursively
exports.createDir = function (dir) {
const splitPath = dir.split('/');
splitPath.reduce(function (dirPath, subPath) {
let currentPath;
if (subPath != '.') {
currentPath = dirPath + '/' + subPath;
if (!fs.existsSync(currentPath)) {
fs.mkdirSync(currentPath);
}
} else {
currentPath = subPath;
}
return currentPath
}, '');
};
exports.createDir(dir);
var output = fs.createWriteStream(path.join(dir, 'logs.zip'));
var archive = archiver('zip', {});
var logPath = __dirname + '/logs';
output.on('close', function () {
if (fs.existsSync(logPath)) {
fs.readdirSync(logPath).forEach(function (file, index) {
var curPath = logPath + "/" + file;
if (!fs.lstatSync(logPath).isFile()) {
// delete file
if(!(file == ignoredFile)) {
fs.unlinkSync(curPath);
}
}
});
}
});
output.on('end', function () {
console.log('Data has been drained');
});
archive.on('warning', function (err) {
if (err.code === 'ENOENT') {
console.log(err);
} else {
// throw error
console.log(err);
throw err;
}
});
archive.on('error', function (err) {
logger.error(err);
throw err;
});
archive.pipe(output);
//ignoring 2017-12-06.log
archive
.glob(__dirname + '/logs/**', {
ignore: [__dirname + '/logs/'+ignoredFile]
})
.finalize();
我得到了这个场景的解决方案。我更改了 archive.glob(),它对我有用。
`//ignoring 2017-12-06.log
archive
.glob('./logs/**/*', {
ignore: ['./logs/**/*' + ignoredFile]
})
.finalize();`
我必须归档一个存在日志文件的目录(文件名的格式为 i.e 2017-12-06.log
)。我必须归档除 2017-12-06.log
之外的所有文件。
我有一个日志目录,其中包含所有日志文件和一个脚本 create-zip.js
。当我 运行 使用 node create-zip.js
跟随脚本时,它会创建目录 /archive/<year>/<month_name>
并保存在 logs.zip
文件夹中。
一切都很好,除了我提取 logs.zip
时,我的存档日志文件位于 /archive/<year>/<month_name>/home/hotam/nodejs_archive_example/logs
中,但我希望这些文件位于 /archive/<year>/<month_name>
中。我用谷歌搜索了很多但找不到解决方案。提前致谢。
我有以下脚本(create-zip.js
):
'use strict';
var fs = require('fs'),
path = require('path'),
archiver = require('archiver'),
currDate = new Date(),
year = currDate.getFullYear(),
month = currDate.toLocaleString("en-us", { month: "long" }),
dir = path.join(__dirname + '/archive/' + year + '/' + month),
ignoredFile = currDate.getFullYear()+'-'+('0' + (currDate.getMonth() + 1)).slice(-2)+'-'+('0' + currDate.getDate()).slice(-2)+'.log';
//Function to create directories recursively
exports.createDir = function (dir) {
const splitPath = dir.split('/');
splitPath.reduce(function (dirPath, subPath) {
let currentPath;
if (subPath != '.') {
currentPath = dirPath + '/' + subPath;
if (!fs.existsSync(currentPath)) {
fs.mkdirSync(currentPath);
}
} else {
currentPath = subPath;
}
return currentPath
}, '');
};
exports.createDir(dir);
var output = fs.createWriteStream(path.join(dir, 'logs.zip'));
var archive = archiver('zip', {});
var logPath = __dirname + '/logs';
output.on('close', function () {
if (fs.existsSync(logPath)) {
fs.readdirSync(logPath).forEach(function (file, index) {
var curPath = logPath + "/" + file;
if (!fs.lstatSync(logPath).isFile()) {
// delete file
if(!(file == ignoredFile)) {
fs.unlinkSync(curPath);
}
}
});
}
});
output.on('end', function () {
console.log('Data has been drained');
});
archive.on('warning', function (err) {
if (err.code === 'ENOENT') {
console.log(err);
} else {
// throw error
console.log(err);
throw err;
}
});
archive.on('error', function (err) {
logger.error(err);
throw err;
});
archive.pipe(output);
//ignoring 2017-12-06.log
archive
.glob(__dirname + '/logs/**', {
ignore: [__dirname + '/logs/'+ignoredFile]
})
.finalize();
我得到了这个场景的解决方案。我更改了 archive.glob(),它对我有用。
`//ignoring 2017-12-06.log
archive
.glob('./logs/**/*', {
ignore: ['./logs/**/*' + ignoredFile]
})
.finalize();`