Как заархивировать файл в perl, используя IO :: Compress :: Zip - PullRequest
0 голосов
/ 12 апреля 2020

Кто-нибудь знает, как использовать опцию Уровень в IO :: Compress :: Zip?

У меня проблема в том, что я пытаюсь заархивировать файл резервной копии БД. Но после Zip файл меньше исходного файла и не может быть использован для импорта файла на другой сервер. Этот файл выглядит примерно так ... Я использую perl, чтобы сжать файл вот так ...

my $zipfile = zip['MYFILE'] => $zipFile, Zip64 => 1, Method => ZIP_CM_STORE
        or die "Zip failed: $ZipError\n";

Но безуспешно. Например, размер файла оригинального файла составляет 13,910,216 КБ, а при архивировании Zip - 13,909.298 КБ.

Я не знаю почему, но думаю, мне нужно установить для параметра «Уровень» значение Z_NO_COMPRESSION. Как это сделать?

Спасибо

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Как уже упоминалось, указав метод ZIP_CM_STORE, вы говорите IO::Compress::Zip вообще не сжимать файл.

Если вы вообще не указываете Method, код будет использовать ZIP_CM_DEFLATE (это стандартное сжатие, используемое практически во всех zip-файлах)

my $zipfile = zip['MYFILE'] => $zipFile, Zip64 => 1
        or die "Zip failed: $ZipError\n";

Если вы Чтобы изменить уровень сжатия, используйте параметр Level. По умолчанию он использует Z_DEFAULT_COMPRESSION для уровня сжатия. Если вы хотите лучшее сжатие, используйте Z_BEST_COMPRESSION

my $zipfile = zip['MYFILE'] => $zipFile, Zip64 => 1, Level => Z_BEST_COMPRESSION
        or die "Zip failed: $ZipError\n";
0 голосов
/ 13 апреля 2020

Исходя из цепочки разговоров, я попытался воспроизвести сценарий использования.

Сначала создайте файл, по размеру похожий на ваш

$ truncate -s 13910K test
$ ls -lh test
-rw-rw-r-- 1 xxx yyy 14M Apr 13 12:00 test

Добавьте его в zip-файл, используя IO::Compress::Zip

$ perl -MIO::Compress::Zip=:all -e 'zip "test" => "test.zip", Method => ZIP_CM_STORE'

Проверьте размеры & CR C

$ crc32 test
49769d91

$ ls -l test
-rw-rw-r-- 1 xxx yyy 14243840 Apr 13 12:00 test

$ unzip -lv test.zip 
Archive:  test.zip
 Length   Method    Size  Cmpr    Date    Time   CRC-32   Name
--------  ------  ------- ---- ---------- ----- --------  ----
14243840  Stored 14243840   0% 2020-04-13 11:48 49769d91  test
--------          -------  ---                            -------
14243840         14243840   0%                            1 file

Все как положено. Размеры и CRC совпадают.

Не могли бы вы попробовать это в вашей системе, пожалуйста?

...