1

複数のファイルとフォルダーを持つ zip ファイルがいくつかあります。基本的にテキストファイルが含まれています。拡張子「a」と「b」を言います。

perl スクリプトまたは Java コードを使用して、拡張子「a」のファイルと拡張子「b」のファイルを別々の zip ファイルに分けたいと考えています。

ファイルを解凍する代わりに、コンテンツを選択して別の zip ファイルに入れることはできますか。これは可能ですか?どんな助けでも素晴らしいでしょう。

私がこれを疑問に思った理由は、大きなサイズの zip ファイルが多数あるためです。これが可能であれば、私のコードは非常に効率的です。

また、perl を使用するか Java を使用するかについてのコメントはおまけです。

ありがとうございました。

4

3 に答える 3

3

Java ZipFileクラスを使用して、zipファイルの内容を読み取り、zip内のエントリを反復処理し、関連するエントリの入力ストリームを取得できます。ZipOutputStreamを使用すると、ファイルを新しいzipファイルに直接配置できますが、その間に解凍/圧縮されます。zip形式のコンテンツを直接コピーできるツールを知りません。

于 2012-10-19T19:03:26.350 に答える
2

これは、PerlArchive::Zipライブラリを使用して行われる可能性があります。

実際のワンライナーは次のようになります。

perl -MArchive::Zip -e 'Archive::Zip->new("test.zip")->extractMember("testx.txt", "foo.txt");'

しかし、私はいくつかのチェックでさえ完全なコードを提供したいと思います:

use Archive::Zip;

my $zip = Archive::Zip->new("test.zip");
my $file_path = "test.txt";

my $PARANOID = 1;
if ($PARANOID) {
    my $file = $zip->memberNamed($file_path);
    unless ($file) {
        die "File '$file_path' not found in the archive";
    }
}

$zip->extractMember($file_path, "extracted_file.txt");

Archive::Zipライブラリをインストールする必要があることに注意してください。

cpan Archive::Zip

または、Perlエコシステムに自信があり、光沢のあるcpanmユーティリティがインストールされている場合:

cpanm Archive::Zip
于 2012-10-20T10:45:36.307 に答える
0

Unix の zip には、あるアーカイブから別のアーカイブにファイルをコピーする --copy オプションがあることがわかりました。プロセスでファイルを解凍するとは思わないので、あなた(そして私)が必要とするものだけであるはずです。

構文は次のとおりです。

$ zip source.zip "*.c" --copy --out destination.zip
于 2017-04-10T17:41:42.860 に答える