top

TOP  RSS  Login

Perl - Archive::Tar

概要

tar アーカイブファイルに対する、展開、作成、ファイルの追加などを行うためのモジュール。モジュール自体は Pure Perl。Perl 5.10 以降では標準モジュール。Perl 5.8 で導入するには、cpan -i Archive::Tar などしてインストールする必要がある。

Archive::Tar はバージョン 1.40 現在、GNU zip (GZIP) / zlib、bzip2 形式の tar アーカイブファイルをサポートしている。ただし bzip2 形式を扱うためには、非標準モジュールの IO::Uncompress::Bunzip2, IO::Compress::Bzip2 がインストールされていなければならない。

tar アーカイブを展開する

ただ単に展開する場合

クラスメソッド extract_archive( ファイル名 [, 圧縮形式] ) を利用する。

use Archive::Tar;

Archive::Tar->extract_archive("hoge.tgz") or die;
# 圧縮形式は自動的に判別されるが、
#  extract_archive("hoge.tgz", COMPRESS_GZIP)
# と圧縮形式を明示しても良い
# その場合、use Archive::Tar::Constant; と定数をインポートしなければならない

Archive::Tar オブジェクトを利用して展開する場合

use Archive::Tar;

my $tar = Archive::Tar->new;
$tar->read("hoge.tgz") or die; # 圧縮形式は自動的に判別される

# あるいは
# $tar = Archive::Tar->new("hoge.tgz");
# として new() の引数としてファイル名を渡すと、read() と同様に読み込まれる


# アーカイブに特定のファイルが含まれているか
if($tar->contains_file("hoge.txt")){
    print "contains file hoge.txt\n";
}

# アーカイブに含まれるファイルのリストを得る
my @list = $tar->list_files;
print join("\n", @list, "");

# 属性を指定して詳細な情報を得ることもできる
@list = $tar->list_files([qw(
    prefix name size mode mtime
    uid gid uname gname
    linkname devmajor devminor )]);

print join("\n", (map {
    ($_->{prefix} != "" ? "$_->{prefix}/" : "").
    "$_->{name} ". sprintf("%04x", $_->{mode}). " $_->{size}";
} @list), "");

# カレントディレクトリ以下に圧縮ファイルを展開
$tar->extract or die;

# あるいは他のディレクトリ以下に展開する場合
#  setcwd( パス )
# を用いる
$tar->setcwd("/tmp");
$tar->extract or die;

tar アーカイブの内容を取り出す

use Archive::Tar;

my $tar = Archive::Tar->new("hoge.tgz") or die;

for my $name ($tar->list_files){
    my $data = $tar->get_content($name); # データを取り出す
    print join("\n", "file: $name", $data, "");
}

tar アーカイブの内容を変更する

use Archive::Tar;
use Archive::Tar::Constant; # 定数をインポートする

my $tar = Archive::Tar->new("hoge.tgz") or die;

# アーカイブからファイルを削除 : remove( ファイル名... )
if($tar->contains_file("deleteme.txt")){
    $tar->remove("deleteme.txt");
}

# アーカイブの内容を全て削除 : clear()
$tar->clear;

# システムに存在するファイルをアーカイブへ追加 : add_files( ファイルパス... )
$tar->add_files("hoge.dat");

# データと併せてファイルを追加 : add_data( データ, ファイル名 )
$tar->add_files("this is data", "hello.txt");


# 以上の処理は全てメモリ上のみで行っている。
# 実際のアーカイブファイルへデータを書き込むには、
#  write(ファイル名 [, 圧縮形式])
# を使う。
# 圧縮形式を指定しなければ、フィルタを通さない圧縮なしの tar アーカイブとなる
$tar->write("hoge.tgz", COMPRESS_GZIP);

# あるいは bzip2 形式で
$tar->write("hoge.tbz", COMPRESS_BZIP);

新たに tar アーカイブを作成する場合は、new() に引数を渡さない(既存のアーカイブを読み込ませない)ことを除けば、あとは上記と同様に行う。

リンク

Last modified:2008/11/29 17:22:54

bGD

0.215049