7

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

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

4

5 回答 5

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();
于 2009-02-05T17:35:40.460 回答
7

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

于 2009-02-05T11:51:03.823 回答
7

两个参数;压缩的 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 );
于 2009-12-16T16:25:22.307 回答
3

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

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

如果您实际上只是想压缩目录,我只需直接运行命令,您不需要使用 Perl。如果你之后需要做一些花哨的处理,也许你应该这样做。这取决于。

于 2009-02-05T11:52:35.490 回答
2

在我看来, rsync 可能是一个更好的解决方案,但你没有说太多关于你有什么其他限制。

于 2009-02-07T00:17:52.817 回答