小池啓仁 ヒロヒト応援ブログ By はてな

小池啓仁(コイケヒロヒト)の動画など。

小池啓仁 ヒロヒト応援ブログ By はてな

PerlでZIP/UNZIP

WindowsXPでは標準装備で、ZIPでの圧縮/解凍機能がありますが・・・。
Perlでも標準モジュール(Archive)で、ZIPでの圧縮/解凍機能があります。
簡単なサンプルを組んで見ましたので、何かの機会に参考になれば幸いです。

◆ZIP圧縮サンプル(zip.pl)

use strict;
use warnings;
use Archive::Zip;

my $zip_file = 'file.zip';

my $zip = Archive::Zip->new();
$zip->addFile('data/file.txt');
$zip->addFile('data/file2.txt');
$zip->addTree('aaa', 'aaa');
$zip->addTree('bbb', 'ccc');
$zip->addTree('./a/b/c', 'd');
$zip->writeToFileNamed($zip_file);

addFileは引数のファイルを、addTreeは第1引数のフォルダをZIP圧縮します。
ちなみに、addTreeの第2引数は解凍される時のフォルダ名を指定します。
圧縮は、引数で指定したファイルやフォルダがあるフォルダ内でzip.plを実行します。

◆ZIP解凍サンプル(unzip.pl)

use strict;
use warnings;
use Archive::Zip;

my $dir = '.';
my $zipfile = "$dir/file.zip";

my $zip = Archive::Zip->new($zipfile);
my @members = $zip->memberNames();
foreach (@members) {
    $zip->extractMember($_, "$dir/$_");
}

解凍は、file.zipがある同じフォルダ内でunzip.plを実行します。