Domanda

voglio archiviare una directory (non so se posso chiamare "Voglio catrame una directory"). Voglio conservare le autorizzazioni di accesso all'altra estremità, quando ho un-tar esso. Io dovrei affrontare questo problema in Perl.

Grazie per la risposta, ma questo che sto chiedendo per farlo Perl è lo voglio indipendente dalle piattaforme. Voglio trasferire un unico grande file su più macchine. Tali macchine possono essere di qualsiasi piattaforma. Dovrei essere in grado di decomprimere il file tar correttamente giusto? Quindi voglio scrivere il mio catrame e programmi untar. Perché sto usando Perl è quello di rendere la piattaforma è indipendente. Quindi non posso usare il comando tar aprendo il guscio in sceneggiatura e cose del genere. Il Archive :: Tar modulo si occupa solo con i file tar ma non ha alcuna possibilità di archiviare i file .

È stato utile?

Soluzione

Ecco un semplice esempio:

#!/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();

Altri suggerimenti

Si potrebbe desiderare di guardare Archive: : Tar su CPAN. (Io sono solo indovinando, non ho mai usato io stesso). Perché ti ostini a farlo in Perl?

Due parametri; il nome del file tar compresso e il nome della directory che si desidera nel file tar. ad esempio

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 );

È possibile utilizzare il modulo Archive :: Tar Perl, oppure si può eseguire direttamente tar.

Se si esegue con la possibilità di utilizzare tar dalla linea di comando, utilizzare l'opzione -p per preservare i permessi.

Se si sono letteralmente solo cercando di tar della directory, avevo appena eseguito direttamente il comando, non è necessario utilizzare Perl. Se avete bisogno di fare un po 'di elaborazione di fantasia in seguito, forse si dovrebbe. Dipende.

Sembra a me come rsync potrebbe essere una soluzione migliore per questo, ma non hanno detto molto su ciò che gli altri vincoli che si hanno.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top