Domanda

io sto usando qui di seguito il codice Perl per elencare i file di archivio tar. La dimensione del archivio tar è sempre circa 15MB.

my $file = shift;
my $tar = Archive::Tar->new("$file");
my @lists = $tar->list_files;
$tar->error unless @lists;

L'esecuzione di questo codice mi dà un errore "Memoria insufficiente". Ho circa 512 MB nel mio sistema Linux e io non voglio aumentare la memoria del mio sistema. Qualcuno può suggerire me, se questo codice può essere modificato per migliorare le prestazioni o di un altro codice per elencare i file in archivio tar.

È stato utile?

Soluzione

ho provato che su una grande catrame e ottenuto un errore troppo. Probabilmente un bug in librerie. Di seguito ha lavorato per me:

@files = split/\n/, `tar tf $file`

Altri suggerimenti

Archive::Tar FAQ :

  

Non è Archive :: Tar lento?   Sì. E 'pura Perl, quindi è molto più lento allora il vostro / bin / tar Tuttavia, è molto portabile. Se la velocità è un problema, è possibile utilizzare / bin / tar invece.

     

Non è Archive :: Tar più pesante sulla memoria di / bin / tar?   Si è, vedi risposta precedente. Dal momento che Compress :: Zlib e quindi IO :: Zlib non supporta cercano sui loro filehandle, c'è poca scelta ma per leggere l'archivio nella memoria. Questo è ok se si vuole fare la manipolazione in memoria dell'archivio.

     

Se si desidera solo per estrarre, utilizzare il metodo della classe extract_archive invece. Sarà ottimizzare e scrivere su disco immediatamente.

     

Un'altra opzione è quella di utilizzare il metodo di classe iter per scorrere i file nel tarball, senza leggerli tutti in memoria in una sola volta.

Quindi, sulla base sopra allora questo dovrebbe essere la soluzione (non testata):

my $next = Archive::Tar->iter( $file );

while ( my $f = $next->() ) {
    say $f->name;
}

/ I3az /

se Perl non è un must, l'uso tar

$ tar tvf file.tar
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top