2009-03-17 12 views
6

私はPerlのArchive::Tarモジュールを使用しています。問題は、すべてをメモリにプルしてアーカイブしてからファイルシステムに書き込むため、アーカイブできる最大ファイルサイズに制限があることです。ほとんどの場合、それは覚えていません。 GNU tarの場合、それはファイルの塊を取り込み、それをアーカイブし、メモリに書き込んで、あらゆるサイズのファイルを扱うことができます。 PerlのArchive :: Tarモジュールを使って、どうすればいいですか?PerlのArchive :: Tarを使って、物理メモリよりも大きなファイルをtarできますか?

答えて

6

インメモリ構造を使用しない別のモジュールがあるようです:Archive::Tar::Streamed。欠点は、実行されているシステム上でtarを利用できることです。それでも、それはあなた自身の人形弦のタールよりも優れています。

+0

'Archive :: Tar :: Streamed'のドキュメントには、「ポータブルでネイティブなtarのないプラットフォームでも使えるようにすることを目指しています」と書かれています。あなたの答えは受け入れられた答えなので、あなたはそれを更新したいかもしれません。 – Borodin

12

Archive::Tar::Wrapperはあなたの最善の策です。私は自分で試してみませんでしたが、あなたのシステムのtar実行可能ファイルを使用し、メモリにファイルを保存しません。

Chasとは逆です。オーウェンの答えは、Archive::Tar::Streamedですはファイルをメモリに保存し、ではシステムのtarを使用しません。実際にはArchive::Tarを内部的に使用しますが、一度に1つのファイルを処理します(tarアーカイブを連結できるという利点を利用しています)。つまり、Archive :: Tar :: Streamedは、アーカイブ内の個々のファイルがメモリに収まる限り、メモリよりも大きなアーカイブを処理できます。しかし、それはあなたが求めているものではありません。

+0

私は誤っていないと、コマンドラインの 'tar'関数を持たないため、WrapperクラスがWindows上で動作しないという主な欠点があると思います。そのような場合、Streamedはより良い賭けです。 –

関連する問題