Journal(2005) | Blog(2006) | RandomLink | WhoAmI | LiveBookmark | HomePage

<<Previous: Perl 6 什么时候才能完成?  >>Next: 使用h2xs打包模块

Tar

Category: Modules   Keywords: Archive::Tar

用Tar压缩文件

  1. 一个简单的Archive::Tar例子:
    my $tar = Archive::Tar->new();
    my @file = ("1.cgi", "2.txt");
    $tar->add_files(@file);
    $tar->write("$dir/$name.tar");# $dir 为要保存的目录路径,$name 为文件名
    
  2. 如果1.cgi,2.txt不在程序目录下那必须增加如下代码与$tar->add_files前
    chdir "$targetdir";#转到文件所在目录,在此之前须在程序最前面增加 use Cwd;
    
  3. 关于@file
    如果@file中的元素包含了路径,那生成的$name.tar文件解压缩后根据路径生成文件夹来包含该元素的文件。

  4. 我写的获得某一目录下所有文件,和子目录加文件
    sub GetDir {
    	my ($dir, $file_ref, $subdir) = @_;
    	if (($subdir ne "") && ($subdir !~ /\/$/)) { $subdir = "$subdir/"; }
    	opendir (DIRS, "$dir");
    	my @dirdata = readdir(DIRS);
    	closedir (DIRS);
    	foreach (@dirdata) {
    		next if (/^\.+$/);
    		if (-d "$dir/$_") {
    			&GetDir("$dir/$_", $file_ref, "$subdir$_");
    		} else {
    			push (@$file_ref, "$subdir$_");
    		}
    	}
    }
    
  5. 一个完整例子
    #!/usr/bin/perl
    # By 非四(Fayland) @ http://www.1313s.com/
    use CGI::Carp qw(fatalsToBrowser);
    use Archive::Tar;
    use Cwd;
    $|++;
    #两个参数,第一个为打包的目录绝对路径,第二为tar文件的保存绝对路径
    my $tar = Archive::Tar->new();
    my ($target, $savefile) =@_;
    my @file;
    GetDir("$target", \@file);
    chdir "$target";
    $tar->add_files(@file);
    $tar->write("$savefile");
    

用Tar解压缩

use Archive::Tar;
use Cwd;
my $tar = Archive::Tar->new();
$tar->read("$from_dir/$target.tar"); # tar 文件的绝对路径地址
my @files = $tar->list_files();
#&createdir("$to_dir"); # 如果目标文件夹不存在,则创建
chdir $to_dir;
$tar->extract(@files, $to_dir);

个人经历

因为是虚拟空间,所以经常要搬来搬去的。如果一个个文件弄回本地机子再传上去感觉速度很慢。
就我目前的空间就占用了大概700多M,万把个文件。而且Linux虚拟主机传上去还要chmod为666才能被程序修改。
没办法,唯一的好选择就是用Tar然后unTar。速度很快而且不用chmod。
更详细的应用代码可以在NiBoard的cgi-bin/admin/tar.pl和untar.pl里找到。

<<Previous: Perl 6 什么时候才能完成?  >>Next: 使用h2xs打包模块

Options: +Del.icio.us

Related items Created on 2004-10-30 19:27:32, Last modified on 2005-01-06 21:41:44
Copyright 2004-2005 All Rights Reserved. Powered by Eplanet && Catalyst 5.62.