Как заархивировать директорию 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 шт):
Насколько я понимаю, эта библиотека преназначена в основном для сжатия данных в памяти и не рассчитана на многофайловые архивы. Попробуйте взять Archive::Zip. В нем можно не особо заморачиваясь упаковать или директорию:
my $dir_member = $zip->addDirectory( 'dirname/' );
или отдельно файлы, с возможностью переименования и назначения виртуального пути:
my $file_member = $zip->addFile( 'xyz.pl', 'fakedir/AnotherName.pl' );