J'utilise le code Perl ci-dessous pour lister les fichiers dans l'archive tar. La taille de l'archive tar est toujours d'environ 15 Mo. L'exécution de ce code me donne une erreur "Mémoire insuffisante". J'ai environ 512 Mo dans mon système Linux et je ne veux pas augmenter la mémoire de mon système. Quelqu'un peut-il me suggérer si ce code peut être modifié pour une meilleure performance ou un autre code pour lister les fichiers dans l'archive tar.Pourquoi l'archive Perl de Tar est-elle à court de mémoire?
Répondre
J'ai essayé cela sur un gros goudron et j'ai aussi eu une erreur. Probablement un bug dans les bibliothèques. Ce qui suit a fonctionné pour moi:
@files = split/\n/, `tar tf $file`
si Perl n'est pas un must, utilisez le goudron
$ tar tvf file.tar
Mais la question concerne les archives de Perl :: Tar – Celada
De Archive::Tar
FAQ:
est-ce pas Archive :: Tar lente? Oui c'est. C'est du perl pur, donc c'est beaucoup plus lent que votre/bin/tar Cependant, c'est très portable. Si la vitesse est un problème, pensez à utiliser/bin/tar à la place.
Est-ce que Archive :: Tar n'est pas plus lourd dans la mémoire que/bin/tar? Oui, c'est, voir la réponse précédente. Comme Compress :: Zlib et donc IO :: Zlib ne supporte pas la recherche sur leurs handles de fichiers, il n'y a pas d'autre choix que de lire l'archive en mémoire. C'est correct si vous voulez faire de la manipulation en mémoire de l'archive.
Si vous souhaitez simplement extraire, utilisez plutôt la méthode de classe extract_archive. Il va optimiser et écrire sur le disque immédiatement.
Une autre option consiste à utiliser la méthode de classe iter pour itérer sur les fichiers dans l'archive sans les lire tous en même temps dans la mémoire.
donc basée sur ci-dessus cela devrait être la solution (non testé):
my $next = Archive::Tar->iter($file);
while (my $f = $next->()) {
say $f->name;
}
/I3az/
Etat la langue ainsi que le système de operting afin que nous puissions commencez avec votre problème –
son perl et OS est Linux – Space