Skip to content
/ zipper Public

Searches best "passes" parameter for 7-Zip zip archives

Notifications You must be signed in to change notification settings

VaKonS/zipper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Zipper

Searches best "-mpass" parameter for 7-Zip ZIP archives.


Warning: the process is slow and shrinks only by a few bytes.

In other words, it's almost useless.

This program is public domain.


Requirements:

7-Zip archiver by Igor Pavlov. Tested with 7-Zip v17.00.
To compile, TCLAP package is needed.


Basic usage:

zipper.exe -o "output_directory"

Will compress all files from current directory to "output_directory\file.extension.best#.of#.cycle#.zip".
Try to use "/" or "\\" instead of "\" in paths in case of errors.

Current limitations:

  • When compressing to single archive, all files from subfolders will be in root folder of archive.
  • Parameters (i. e. directories/archive name) can be only in local codepage. But found filenames can have any codepage. They will not be shown correctly in console, but should be processed fine.
  • Search time is evaluated only for maximal precalculated cycle. I did not find a formula for smaller cycles (attempt was in commit 9afc972), therefore only maximal possible cycle will be found.
    It only affects time estimation, with default settings cycles smaller than maximal will end the search as intended.

Tuning:

-t "temporary_path"
Store temporary archives in specified directory. Can be set to RAM drive to avoid disk wearing.

-l #
Limit memory usage. Default is 512 MB.

-n "archive.zip"
Compress into single archive (instead of separate archives by default).

-s 0 (zero)
Disable adding ".best#.of#" to names of separate archives.

-f 0 (zero)
Omit ".cycle#" in names of separate archives (detected cycle, can help find wrong results).

-p #
Limit number of search passes. By default limited to 100. Set to 0 to search until memory limit (depending on compressing files, can be very slow).

-b #
Begin from # passes. For example, when you need to continue a search.

-d #
Stop after # identical archives. Values higher than 12 are probably useless.

-a #
Detect end of search by alternative methods:
 • 0 (default) - N identical archives in minimal found cycle. Seems to be most adequate;
 • 1 - any N identical archives. Fastest method, but maybe skips results. So far found results were same, but it needs more testing;
 • 2 - N identical archives in maximal detected cycle. I'm not sure whether minimal cycle is sufficient or not, so this option is for testing;
 • 3 - full minimal found cycle. Should not be needed, for testing;
 • 4 - full maximal detected cycle. For testing, longest search.

-m off/#
Turn 7-Zip multithreading option off or limit number of threads.

-c "7z.exe"
Manually set the pathname of 7-Zip executable.

-r "command_template"
Redefine the archiving command. Template sequence %c is substituted with archiver's pathname, %p – with number of passes, \"%i\" – with compressing file, \"%o\" – with archive.zip. Use "%%i" when you need "%i" text in command without substitution.


In Russian:

Подбирает -mpass ("количество проходов") для максимального сжатия архива ZIP.
Разница обычно в несколько байт, особого смысла в этом нет.
Но если файлов очень много, несколько килобайт ужмутся.

Для запуска требуется архиватор 7-Zip. Проверялась с версией 17.00.
Для компиляции нужен пакет TCLAP.


Запуск:
zipper.exe -o "папка_для_архивов"

Сожмёт все файлы из текущего каталога в "папку для архивов".
При ошибках попробуйте заменить в путях "\" на "/" или "\\".

Ограничения на данный момент:

  • При сжатии в один архив, все файлы из подкаталогов будут в корне архива.
  • Параметры (имена каталогов/архива) могут задаваться только в текущей кодовой странице. Файлы, которые программа найдёт сама, могут быть с именами в любой кодовой странице. Они не будут верно отображаться, но обрабатываться должны правильно.
  • Время до окончания поиска оценивается для максимального вычисленного цикла. Я не нашёл точной формулы размера меньших циклов (попытка была в коммите 9afc972), поэтому вычисляется только максимальный цикл.
    Это влияет исключительно на оценку времени, поиск при стандартных настройках будет остановлен и при нахождении меньшего цикла.

Дополнительные параметры:

-t "временная папка"
Делать временные архивы в указанной папке. Например, можно указать RAM диск.

-l #
Ограничить потребление памяти (изначально 512 метров).

-n "архив.zip"
Сжимать в один архив вместо отдельных для каждого файла.

-s 0 (ноль)
Не добавлять к именам раздельных архивов ".best#.of#".

-f 0 (ноль)
Не добавлять к именам раздельных архивов ".cycle#" (найденный размер цикла, помогает отследить возможно неправильные результаты).

-p #
Ограничить количество попыток (100 по умолчанию). Установите в ноль для неограниченного поиска, пока хватит памяти (в зависимости от сжимаемых данных, поиск может быть очень долгим).

-b #
Начать с # проходов. Например, если нужно продолжить поиск.

-d #
Останавливаться при # повторах сжатия. После тестов похоже, что значения выше 12 уже ничего не меняют.

-a #
Условие для окончания поиска:
 • 0 (исходное) - N совпавших архивов в минимальном найденном цикле. Вероятно, оптимальный вариант;
 • 1 - N любых совпавших архивов. Не проверяет циклы, быстрее всего, но не исключено, что пропускает результаты из-за меньшего числа попыток. Пока что результаты совпадают, но нужно тестирование;
 • 2 - N совпавших архивов в максимальном вычисленном цикле. Возможно, что минимальный цикл недостаточен и пропускает результаты, для тестового поиска до максимального цикла;
 • 3 - минимальный цикл с полным совпадением. Для тестирования, при значениях -d 12 и выше разницы с вариантом по умолчанию быть не должно;
 • 4 - полное совпадение в максимальном вычисленном цикле. Для тестирования, наиболее длительный поиск.

-m off/#
Задать количество потоков для архиватора 7-Zip.

-c "7z.exe"
Указать расположение архиватора 7z.exe.

-r "шаблон_команды"
Переопределить выполняемую команду. Вместо символов %c шаблона подставляется имя архиватора, %p – количество проходов, \"%i\" – сжимаемый файл, \"%o\" – архив.zip. Если в команде нужен текст "%i" без подстановки, используйте "%%i".

About

Searches best "passes" parameter for 7-Zip zip archives

Resources

Stars

Watchers

Forks

Packages

No packages published