没错,我有一个文件夹,里面装满了其他文件夹,这些文件夹被压缩成.gz文件。这些文件夹中有文本文件。
我想有一个程序来循环浏览这些文本文件,看看它们是否包含特定的字符串,但要做到这一点,我需要先解压缩它们。我不想开始摆弄文件(除非我可以临时制作它们并在之后删除(,我只想对.gz文件夹的内容执行操作。我试过zlib.Gunzip()._outBuffer.toString()
,它在压缩文件夹中使用时会发出大量胡言乱语。
我应该如何继续?
最近不得不做一些类似的事情,以下是对我有效的方法:基本上,您只需将文件读入buffer
,然后就可以将其传递给gunzip
函数。这将返回另一个缓冲区,您可以在该缓冲区上调用toString('utf8')
,以便将内容作为字符串获取,这正是您所需要的:
const util = require('util');
let {gunzip} = require('zlib');
const fs = require('fs');
gunzip = util.promisify(gunzip);
async function getStringFromGzipFile(inputFilePath) {
const sourceBuffer = await fs.promises.readFile(inputFilePath);
return await gunzip(sourceBuffer);
}
(async () => {
const stringContent = await getStringFromGzipFile('/path/to/file');
console.log(stringContent);
})()
编辑:
如果你想压缩并提取一个目录,你可以使用tar-fs
,它会将内容提取到指定的目录中。一旦处理完其中的文件,您就可以删除该目录。以下是gunzip
和提取.tar.gz
:的方法
function gunzipFolder(sourceDir, destination) {
fs.createReadStream(sourceDir)
.pipe(zlib.createGunzip())
.pipe(tar.extract(destination));
}