メモ程度に、.tar.gzのファイルを解凍する方法です。
gunzipの部分はzlibで、tar
の中身を取り出すのはnode-tarを使います。
var fs = require('fs');
var zlib = require('zlib');
var tar = require('tar');
var tarballPath = '/path/to/my/tarball.tar.gz';
var outputPath = '/path/to/my/output';
var gunzip = zlib.createGunzip();
var extractor = tar.Extract({path: outputPath});
fs.createReadStream(tarballPath).pipe(gunzip).pipe(extractor);
で終わります。エラー処理や終わった時のコールバックはパイプの.on('error', cb)
と.on('finish', cb)
で簡単に実現できます。
ジェネレーターを使う場合は
ES6のジェネレーターを使うと、コールバックはやや不便ですが、coを使うと、Promise
もyield
できるので、パイプをpromiseとして返してくれるライブラリを使うときれいに書けます。
fs.createReadStream(tarballPath).pipe(gunzip).pipe(extractor);
を
var promisePipe = require('promisepipe');
yield promisePipe(readStream, gunzip, extractor);
に変えれば終わりです。