Node.jsのZlibに飛び込んでいます。提供された例( http://nodejs.org/api/zlib.html#zlib_examples )を使用してファイルを圧縮および圧縮解除することができましたが、同じことを行う方法の詳細を見つけることができませんでしたフォルダ用?
1つの可能性(ただし、私がいじくり回していると考える)は、node-Zip
モジュールとフォルダのすべてのファイルを1つずつ追加します。しかし、解凍すると問題が発生します(この場合、フォルダーが失われます)。
Node.jsを使用してフォルダー全体(サブフォルダー階層を考慮)を圧縮(および圧縮解除)する方法はありますか?
ありがとう。
@generalhenry(質問のコメントを参照)の助けを借りて、ようやくそれを手に入れました。
コメントで述べたように、2つのステップでフォルダーを圧縮する必要があります。
フォルダを_.tar
_ファイルに変換します
_.tar
_ファイルを圧縮する
最初のステップを実行するには、2つのnode.jsモジュールが必要でした。
_npm install tar
npm install fstream
_
最初のファイルでは、_.tar
_ファイルを作成できます。ここでソースコードにアクセスできます https://github.com/isaacs/node-tar
2番目のノードモジュールは、フォルダーの読み取りとファイルの書き込みに役立ちます。基本的なfs
node.jsモジュールに関して、ディレクトリを読み取ることができるかどうかはわかりません(配列内のすべてのファイルを取得することについては、_fs.readdir
_を使用して話しているわけではありません)。フォルダ内のすべてのファイルとその編成を処理します)。
次に、フォルダーを_.tar
_ファイルに変換するときに、Zlib
のGzip()
を使用してフォルダーを圧縮できます。
これが最終的なコードです:
_var fstream = require('fstream'),
tar = require('tar'),
zlib = require('zlib');
fstream.Reader({ 'path': 'path/to/my/dir/', 'type': 'Directory' }) /* Read the source directory */
.pipe(tar.Pack()) /* Convert the directory to a .tar file */
.pipe(zlib.Gzip()) /* Compress the .tar file */
.pipe(fstream.Writer({ 'path': 'compressed_folder.tar.gz' })); /* Give the output file name */
_
これは、node.jsを使用してフォルダー全体を圧縮するのに役立ちました
さらに2つ:
ご覧のとおり、tar
モジュールに関するドキュメントが不足しています。提供された2つの例が_.tar
_ファイルからコンテンツを抽出する方法について話しているので、これがすぐに改善されることを願っています。
fstream
モジュールを使用して、ソースディレクトリを処理しました。これはfs
を使用してバイパスできますか?わかりません(アイデアがあればコメントしてください)。
tar-stream モジュールを使用して、tarアーカイブを作成できます。その点で、node-tarよりもはるかに柔軟でシンプルです。
Tarアーカイブを作成し、zlibを使用して圧縮し、必要な場所(ネットワーク、ファイルシステムなど)に書き込みます。
package tar として更新された回答を提供することは、2013年以降に更新されました。
同じ結果を達成するために、コードははるかに単純で簡単です。
const tar = require("tar"); // version ^6.0.1
const fs = require("fs");
tar.c(
{
gzip: true // this will perform the compression too
},
["path/to/my/dir/"]
).pipe(fs.createWriteStream('path/to/my/dir.tgz'));
明示的にzlib
を使用する必要はありません。