node.js でいくつかの .tar.bz2 ファイルを抽出しようとしています。私はここで、npm、github、および google でこれを検索していますが、すぐに解決できる解決策はありません。
私のファイルはそれぞれ約 25 MB であるため、モジュールを使用してパイプ ストリームを使用するのが最善の方法だと思いtar
ます (.tar.gz 用の node.js の組み込み ZLib ライブラリから Gunzip を使用する方法と同様です)。このようにして、 を使用して、パイプされた http から直接抽出することもできますrequest
。
https://github.com/Woodya/node-gzbz2を見つけました (そして、 のように多くの名前が変更されたフォークですgzbz
) が、node-gyp
. 私が構築しているモジュールは、Python などの外部ライブラリに依存せずに、npm だけを使用して Linux、Mac、および Windows で問題なく動作する必要があるため、これらを使用したくありません。
または、https://github.com/cscott/seek-bzip (およびそのソース) を見て、それが純粋な JavaScript であるのが好きですが、バッファーのみをデコードします。
ここに行く道について誰かアドバイスしてくれませんか?
編集: の作成者はseek-bzip
、同期ストリームを非同期ストリームに変換するラッパーを親切に作成しましたが、この修正は、私の場合は望ましくないものnode-fibers
を再度使用するかどうかによって異なります。https://github.com/cscott/seek-bzip/issues/1node-gyp
を参照してください
edit2: 私はまだクロスプラットフォーム ソリューションを探していますが、CLI コマンドを使用してこれを行う簡単な方法を次に示します。
var cmd = 'bunzip2 -c ' + sourceFile + ' | (cd ' + targetDir + '; tar -xf -)';
require('child_process').exec(cmd, function (err, stdout, stderr) {
if (err) {
// bad
}
// yea!
});