旧燈明日記

自分史と英語学習と映画感想と健康志向と警備一般

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を実行します。