Я пытаюсь установить права доступа к файлам, содержащимся в архиве, с помощью следующего:
print "Checking $tgz_file... ";
my $edited = 0;
my $tarball = Archive::Tar->new($tgz_file);
my @items = $tarball->get_files();
foreach (@items) {
if ($_->is_dir && $_->mode != 0755) {
$_->mode(0755);
$edited = 1;
} elsif ($_->is_file && $_->mode != 0644) {
$_->mode(0644);
$edited = 1;
}
}
if ($edited) {
$tarball->write($tgz_file, COMPRESS_GZIP);
print "edited!\n";
} else {
print "no changes.\n";
}
Но когда вызывается метод write()
, скрипт умирает со следующей ошибкой:
Недостаточно памяти при «большом» запросе
для 268439552 байт, общая sbrk ()
313298944 байт в
/usr/lib/perl5/5.10/i686-cygwin/IO/Compress/Adapter/Deflate.pm строка 43.
Тарбол, вызывающий эту ошибку, составляет 22 МБ (без сжатия - 59 МБ), поэтому приведенные выше цифры немного настораживают. Я имею дело с ошибкой в IO::Compress
? Есть ли какой-то обходной путь в этом случае? Я использую Perl 5.10.1 для i686-cygwin-thread-multi-64int.