Pregunta

Estoy utilizando el código de abajo Perl para listar los archivos en archivo tar. El tamaño del archivo tar siempre se trata de 15MB.

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

Al ejecutar este código me da un error "Memoria insuficiente". Tengo alrededor de 512 MB en el sistema Linux y no quiero aumentar la memoria de mi sistema. Puede alguien por favor me sugieren si este código puede ser modificado para un mejor rendimiento u otro código para listar los archivos en el archivo tar.

¿Fue útil?

Solución

he intentado en un gran alquitrán y dio un error también. Probablemente un error en librerías. Los siguientes trabajó para mí:

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

Otros consejos

Archive::Tar Preguntas :

  

¿No Archive :: Tar lenta?   Sí lo es. Es puro Perl, por lo que es mucho más lento, entonces su / bin / tar Sin embargo, es muy portátil. Si la velocidad es un problema, considere el uso de / bin / tar su lugar.

     

No es Archive :: Tar más pesado en la memoria de / bin / tar?   Sí lo es, ver respuesta anterior. Desde Comprimir :: Zlib y por lo tanto IO :: Zlib no soporta buscan en sus controladores de archivo, no hay más remedio que leer el archivo en la memoria. Esto está bien si usted quiere hacer la manipulación en memoria del archivo.

     

Si lo que desea extraer, utilizar el método de la clase extract_archive lugar. Se optimizará y escribir en el disco inmediatamente.

     

Otra opción es utilizar el método de la clase iter para iterar sobre los archivos en el paquete de archivos sin leerlos todos en memoria a la vez.

Así base en lo anterior, esto debería ser la solución (no probado):

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

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

/ I3az /

Si Perl no es una necesidad, el uso de alquitrán

$ tar tvf file.tar
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top