[FAQ] GZIP-сжатие модулей с помощью консоли 7z.exe
Сжатие в GZIP с помощью консольных 7-ZIP
Как известно, файлы кастомных прошивок, программ, игр и т.п. пожаты в архивы GZIP. Поэтому часто приходится упаковывать таким образом файлы, чтобы они занимали меньше места, а самое важное то, что после кастомизации часто бывает необходимость вернуть файл на строго определённое место, ограниченное размером, когда нельзя делать сдвиг последующего кода.
Как мы знаем, сжимать в GZIP прекрасно умеет архиватор 7-ZIP. Но его GUI интерфейс имеет скромный потенциал и не позволяет гибко манипулировать сжатием. Зато набор консольных команд того же самого модуля архиватора 7z.exe имеет более расширенный функционал, где мы можем по своему желанию сжать файл до нужного нам размера, выбирая нужные нам параметры сжатия.
Какие параметры командной строки нам даёт архиватор 7-ZIP
7-Zip 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
Usage: 7z <command> [<switches>...] <archive_name> [<file_names>...]
[<@listfiles...>]
<Commands>
a: Add files to archive
b: Benchmark
d: Delete files from archive
e: Extract files from archive (without using directory names)
l: List contents of archive
t: Test integrity of archive
u: Update files to archive
x: eXtract files with full paths
<Switches>
-ai[r[-|0]]{@listfile|!wildcard}: Include archives
-ax[r[-|0]]{@listfile|!wildcard}: eXclude archives
-bd: Disable percentage indicator
-i[r[-|0]]{@listfile|!wildcard}: Include filenames
-m{Parameters}: set compression Method
-o{Directory}: set Output directory
-p{Password}: set Password
-r[-|0]: Recurse subdirectories
-scs{UTF-8 | WIN | DOS}: set charset for list files
-sfx[{name}]: Create SFX archive
-si[{name}]: read data from stdin
-slt: show technical information for l (List) command
-so: write data to stdout
-ssc[-]: set sensitive case mode
-ssw: compress shared files
-t{Type}: Set type of archive
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName]: Update options
-v{Size}[b|k|m|g]: Create volumes
-w[{path}]: assign Work directory. Empty path means a temporary directory
-x[r[-|0]]]{@listfile|!wildcard}: eXclude filenames
-y: assume Yes on all queries
Итак, для выполнения сжатия, из списка команд видно, что нам потребуется <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.