如何在Perl中归档目录,就像在UNIX中一样?

时间:2009-02-05 11:46:34

标签: perl tar

我想归档一个目录(我不知道我是否可以调用“我想tar目录”)。当我取消tar时,我想在另一端保留访问权限。我应该在perl中解决这个问题。

感谢您的回复,但为什么我要求这样做Perl是我希望它独立于平台。我想将一个大文件传输到多台机器。这些机器可以是任何平台。我应该能够正确解开这个tar文件吗?所以我想编写自己的tar和untar程序。为什么我使用Perl是为了使它与平台无关。所以我不能通过在脚本中打开shell来使用tar命令。 Archive::Tar模块仅处理tarred文件,但它没有归档文件的选项。

5 个答案:

答案 0 :(得分:9)

这是一个简单的例子:

#!/usr/bin/perl -w

use strict;
use warnings 'all';
use Archive::Tar;

# Create a new tar object:
my $tar = Archive::Tar->new();

# Add some files:
$tar->add_files( </path/to/files/*.html> );
# */ fix syntax highlighing in stackoverflow.com

# Finished:
$tar->write( 'file.tar' );

# Now extract:
my $tar = Archive::Tar->new();
$tar->read( 'file.tar' );
$tar->extract();

答案 1 :(得分:7)

您可能希望在CPAN上查看Archive::Tar。 (我只是在猜测,我自己从未使用它。)为什么你坚持在Perl中使用它?

答案 2 :(得分:6)

两个参数;压缩的tar文件的名称以及tar文件中所需的目录名称。 例如

tarcvf test.tar.gz mydir
#!/usr/bin/perl -w 

use strict;
use warnings 'all';
use Archive::Tar;
use File::Find;


my $archive=$ARGV[0];
my $dir=$ARGV[1];

if ($#ARGV != 1) {
    print "usage: tarcvf test.tar.gz directory\n";
    exit;
}

# Create inventory of files & directories
my @inventory = ();
find (sub { push @inventory, $File::Find::name }, $dir);

# Create a new tar object
my $tar = Archive::Tar->new();

$tar->add_files( @inventory );

# Write compressed tar file
$tar->write( $archive, 9 );

答案 3 :(得分:3)

您可以使用Archive :: Tar Perl模块,也可以直接执行tar。

如果您使用命令行中的tar选项运行,请使用-p标志来保留权限。

如果你真的只想查看目录,我只是直接运行命令,你不需要使用Perl。如果你之后需要做一些奇特的处理,也许你应该。这取决于。

答案 4 :(得分:2)

听起来像rsync可能是一个更好的解决方案,但你还没有说明你有什么其他限制。

相关问题