2013-11-14 2 views
2
var targz = require('tar.gz'); 
var extract = new targz().extract(targzFile , destnDir, function(err){ 
if(err) 
    console.log(err); 
console.log('The extraction has ended :'+counter); 
}); 

Вышеприведенный код извлекает tarzFile для destnDir, однако я бы хотел извлечь один файл из targzFile.
Как извлечь один файл из архива tar.gz с помощью узла js

Заранее благодарен.

+0

Это не выглядит, как у вас есть такой вариант, глядя на [источник node- tar.gz] (https://github.com/cranic/node-tar.gz/blob/master/src/targz.coffee). Смотрите код, начинающийся в строке 68, чтобы узнать, что происходит с '.extract'. –

ответ

1

Для всех, кто интересуется ответом, можно использовать потоки и модуль tar-stream. Вот полный пример, который извлекает файл с именем documents.json из архива archive.tar.gz:

var tar = require('tar-stream'); 
var fs = require('fs'); 
var zlib = require('zlib'); 

var extract = tar.extract(); 
var data = ''; 

extract.on('entry', function(header, stream, cb) { 
    stream.on('data', function(chunk) { 
    if (header.name == 'documents.json') 
     data += chunk; 
    }); 

    stream.on('end', function() { 
     cb(); 
    }); 

    stream.resume(); 
}); 

extract.on('finish', function() { 
    fs.writeFile('documents.json', data); 
}); 

fs.createReadStream('archive.tar.gz') 
    .pipe(zlib.createGunzip()) 
    .pipe(extract); 
Смежные вопросы