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
0.073963