31

node.jsのZlibに飛び込んでいます。提供されている例( http://nodejs.org/api/zlib.html#zlib_examples )を使用してファイルを圧縮および解凍できましたが、フォルダーに対して同じことを行う方法について詳しく知ることができませんでしたか?

1つの可能性(しかし、私はいじくり回していると思います)は、node-zipモジュールを使用して、フォルダーのすべてのファイルを1つずつ追加することです。ただし、解凍すると問題が発生します(この場合、フォルダが失われます)。

Node.jsを使用して(サブはんだ階層を尊重して)フォルダー全体を圧縮(および解凍)する方法はありますか?

ありがとう。

4

3 に答える 3

31

@generalhenry (質問のコメントを参照) の助けを借りて、私はついにそれを手に入れました。

コメントで述べたように、2 つのステップでフォルダーを圧縮する必要があります。

  1. .tarフォルダをファイルに変換する

  2. .tarファイルを圧縮する

最初のステップを実行するには、次の 2 つの node.js モジュールが必要でした。

npm install tar
npm install fstream

最初のものでは、.tarファイルを作成できます。ここからソースコードにアクセスできますhttps://github.com/isaacs/node-tar

2 番目のノード モジュールは、フォルダーの読み取りとファイルの書き込みに役立ちます。基本的なfsnode.js モジュールに関しては、ディレクトリを読み取ることができるかどうかはわかりません ( を使用して配列内のすべてのファイルを取得することについて話しているのではなくfs.readdir、フォルダー内のすべてのファイルとその編成を処理することについて話しているのではありません)。

次に、フォルダーを.tarファイルに変換すると、 Gzip()ofを使用して圧縮できますZlib

最終的なコードは次のとおりです。

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か? わかりません(アイデアがあればコメントしてください)。

于 2013-03-20T18:55:03.603 に答える
3

tar-streamモジュールを使用して、tar アーカイブを作成できます。次の点で、node-tar よりもはるかに柔軟でシンプルです。

  • アーカイブにファイルを追加できます (node-tar の制限であるディレクトリだけではありません)。
  • 通常のノード ファイルシステム ストリームで動作します (node-tar は奇妙に fstream モジュールの使用を必要とします)。
  • そのかなり完全に文書化されています(node-tarは十分に文書化されていません)
  • ファイルシステムにアクセスせずにアーカイブを作成できます

tar アーカイブを作成し、zlib を使用して圧縮し、必要な場所 (ネットワーク、ファイルシステムなど) に書き込みます。

于 2014-09-01T00:39:33.047 に答える