[FAQ] GZIP-сжатие модулей с помощью консоли 7z.exe
Сжатие в GZIP с помощью консольных 7-ZIP
Как известно, файлы кастомных прошивок, программ, игр и т.п. пожаты в архивы GZIP. Поэтому часто приходится упаковывать таким образом файлы, чтобы они занимали меньше места, а самое важное то, что после кастомизации часто бывает необходимость вернуть файл на строго определённое место, ограниченное размером, когда нельзя делать сдвиг последующего кода.
Как мы знаем, сжимать в GZIP прекрасно умеет архиватор 7-ZIP. Но его GUI интерфейс имеет скромный потенциал и не позволяет гибко манипулировать сжатием. Зато набор консольных команд того же самого модуля архиватора 7z.exe имеет более расширенный функционал, где мы можем по своему желанию сжать файл до нужного нам размера, выбирая нужные нам параметры сжатия.
Какие параметры командной строки нам даёт архиватор 7-ZIP
Итак, для выполнения сжатия, из списка команд видно, что нам потребуется <Commands>
a: Add files to archive (Добавить файлы в архив) - буква ы зачёркнута, т.к. в GZIP нельзя архивировать более 1-го файла!
Далее нам нужны будут следующие <Switches>:
-t{Type}: Set type of archive (установить тип архива) - т.к. нас интересует архивирование в GZIP, то и выставляем тип: -tgzip
-m{Parameters}: set compression Method (установка метода сжатия) - для GZIP существует только метод Deflate и только 3 параметра, об этом ниже...
Сразу приведу пример демонстрации сжатия в архив GZIP с максимально возможным набором команд:
7z a -tgzip arhive.gz file.prx -mx=5 -mfb=4 -mpass=2
Разложим команды сжатия по запчастям...
Команда
Описание
7z
соответственно вызов 7z.exe (расширение обычно не пишут в командах вызова)
a
добавить в архив (от слова add), соответственно e - извлечение (Extract)
-tgzip
параметром -t указываем, что архив gzip, иначе, если не указывать, будет 7z.
archive.gz
название будущего архива
file.prx
название архивируемого файла.
-mx=5
параметром -m указываем сжатие и следом x=5 уровень сжатия (от 1 до 9)
-mfb=4
параметром -m указываем сжатие и следом fb=4 число быстрых байтов (от 3 до 258)
-mpass=2
параметром -m указываем сжатие и следом pass=2 число проходов (от 1 до 15)
Теперь более подробнее о параметрах:
GZip использует те же самые параметры как Zip, но GZip сжимает только с методом Deflate.
Таким образом GZip поддерживает только следующие параметры: x, fb, pass.
Параметр
Значение по-умолчанию
Описание
x=[0|1|3|5|7|9]
5
Устанавливает уровень сжатия
fb={NumFastBytes}
32
Устанавливает число быстрых байтов для Deflate кодера
pass={NumPasses}
1
Устанавливает число проходов для Deflate кодера
Разберём из 1-го столбика таблицы эти параметры поподробнее:
x=[0|1|3|5|7|9]
Устанавливает уровень сжатия. x=0 - означает режим Copy (никакого сжатия).
Установки Deflate/Deflate64:
Уровень
Число быстрых байтов
Число проходов
Описание
1
32
1
Самый быстрый
3
Быстрый
5
Нормальный
7
64
3
Максимальный
9
128
10
Ультра
x=1 и x=3 с Deflate методом устанавливают быстрый режим для сжатия.
fb={NumFastBytes}
Установка числа быстрых байтов для Deflate/Deflate64 кодера. Оно может быть в диапазоне от 3 до 258 (257 для Deflate64). Обычно большее число дает немного лучшую степень сжатия и более медленный процесс сжатия. Большие числа параметра быстрых байтов может значительно увеличить степень сжатия в случае, когда файлы содержат длинные идентичные последовательности байтов.
pass={NumPasses}
Установка числа проходов для Deflate кодера. Оно может быть в диапазоне от 1 до 15 для Deflate.
Обычно большее число дает немного лучшую степень сжатия и более медленный процесс сжатия.
P.S. Есть ещё чисто консольная версия 7za.exe (разница видимо только в том, что в ней нету GUI-интерфейса)
Ну и есть другие консольные утилиты именно для gzip.