Как заархивировать директорию Compress::Zlib в Perl

В дирректорию /home/logs/app/ пишутся csv файлы. Нужно директорию app упаковать и получить архив в /home/logs/. Сейчас делаю системным вызовом "system ('zip -jr '/home/logs/app/logs.zip '/home/logs/app/log/');" Хочу избавиться от системного вызова и использовать Compress::Zlib.

Пытался запускать так

my @files = ('log_01','log_02','log_03');
my $dirname = 'app';
my $path = '/home/logs/';

foreach my $file (@files) {
    open(FILE,$path.$dirname.'/'.$file) or die "$!";
    my $gz = gzopen($gzfile, 'ab');
    while(<FILE>){
        my $byteswritten = $ gz-> gzwrite ($_);
    }
    $gz->gzclose();
    close(FILE);
}

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

Как мне получить архив в котором будет директория log, а уже в ней все файлы?


Ответы (1 шт):

Автор решения: Infarch

Насколько я понимаю, эта библиотека преназначена в основном для сжатия данных в памяти и не рассчитана на многофайловые архивы. Попробуйте взять Archive::Zip. В нем можно не особо заморачиваясь упаковать или директорию:

my $dir_member = $zip->addDirectory( 'dirname/' );

или отдельно файлы, с возможностью переименования и назначения виртуального пути:

my $file_member = $zip->addFile( 'xyz.pl', 'fakedir/AnotherName.pl' );
→ Ссылка