Почему делает Архив Perl:: Tar исчерпывает память?

Получите декомпилятор Sothink SWF. Не свободный, но стоящий того. Недавно используемый он для декомпиляции SWF, что я потерял fla для, и я мог абсолютно распространение в прямом и обратном направлениях swf-fla и назад!
текст ссылки

5
задан brian d foy 10 November 2009 в 19:27
поделиться

3 ответа

I tried that on a large tar and got an error too. Probably a bug in libs. The following worked for me:

@files = split/\n/, `tar tf $file`
3
ответ дан 14 December 2019 в 01:10
поделиться

Из Архив :: Tar FAQ :

Разве Archive :: Tar не медленный? Да. Это чистый Perl, поэтому он намного медленнее, чем ваш / bin / tar. Однако он очень портативен. Если скорость является проблемой, рассмотрите возможность использования вместо этого / bin / tar.

Разве Archive :: Tar не занимает больше памяти, чем / bin / tar? Да, см. Предыдущий ответ. Поскольку Compress :: Zlib и, следовательно, IO :: Zlib не поддерживают поиск по своим дескрипторам файлов, у них нет другого выбора, кроме как читать архив в память. Это нормально, если вы хотите манипулировать архивом в памяти.

Если вы хотите просто извлечь, используйте вместо этого метод класса extract_archive. Он произведет оптимизацию и немедленно запишет на диск.

Другой вариант - использовать метод класса iter для перебора файлов в архиве без одновременного чтения их всех в памяти.

Итак, исходя из вышеизложенного, это должно быть решение (непроверено):

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

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

/ I3az /

6
ответ дан 14 December 2019 в 01:10
поделиться

если Perl не является обязательным, используйте tar

$ tar tvf file.tar
0
ответ дан 14 December 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: