Perl Не удалось извлечь тарбол с помощью Archive :: Tar - PullRequest
0 голосов
/ 20 марта 2020

Когда я пытаюсь извлечь файл tar.gz, я обнаружил, что некоторые из извлечений показывают ошибку контрольной суммы, недопустимый блок заголовка со смещением неизвестно, Не удалось прочитать чанк со смещением неизвестно. И добыча не удалась. Только некоторые tarball имеют эту проблему, в то время как другие не имеют проблем. Я полагаю, что в tarball что-то не так? Но я не был уверен.

use strict;
use warnings;
use Archive::Tar;
$tar->read("x.tar.gz");
$tar->extract();

1 Ответ

1 голос
/ 20 марта 2020

Файлы с расширениями '.tgz' и '.tar.gz' представляют tar, сжатый с помощью алгоритма gzip.

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

Следующий фрагмент кода демонстрирует создание архива tar из всех файлов *.pl в текущем каталоге со сжатием gzip, а затем список всех добавленных файлов в архиве.

use strict;
use warnings;
use feature 'say';

use Archive::Tar;

my $archive = 'files.tar.gz';
my $tar = Archive::Tar->new;

$tar->add_files(glob('*.pl'));
$tar->write($archive, COMPRESS_GZIP);
$tar->clear;

say for $tar->list_archive($archive, COMPRESS_GZIP);

Как извлечь GZIP сжатый tar архив

use strict;
use warnings;
use feature 'say';

use Archive::Tar;

my $archive = 'files.tar.gz';
my $tar = Archive::Tar->new;

$tar->read($archive,COMPRESS_GZIP);
$tar->extract();
...