7

ディレクトリをアーカイブしたいです(「ディレクトリをtarしたい」と呼べるかどうかわかりません)。tar を展開するときに、反対側のアクセス許可を保持したいと考えています。この問題に perl で取り組む必要があります。

回答ありがとうございます。しかし、なぜそれを行うように求めているのですか? Perl は、プラットフォームに依存しないようにしたいのです。1 つの大きなファイルを複数のマシンに転送したい。これらのマシンは、任意のプラットフォームにすることができます。この tar ファイルを適切に untar できるはずですか? だから私は自分の tar と untar プログラムを書きたいと思っています。私が Perl を使用している理由は、プラットフォームに依存しないようにするためです。そのため、スクリプトなどでシェルを開いてtarコマンドを使用することはできません。Archive::Tarモジュールはtarファイルのみを扱いますが、ファイルをアーカイブするオプションはありません。

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

2 つのパラメーター。圧縮された 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 フラグを使用して権限を保持します。

文字通りディレクトリを tar するだけの場合は、コマンドを直接実行するだけです。Perl を使用する必要はありません。後で派手な処理を行う必要がある場合は、そうする必要があります。場合によります。

于 2009-02-05T11:52:35.490 に答える
2

これにはrsyncの方が良い解決策かもしれないように思えますが、他にどのような制約があるかについてはあまり語っていません。

于 2009-02-07T00:17:52.817 に答える