Что делает комбинирование методов сжатия в 7z?

Средство командной строки 7z позволяет указать несколько методов сжатия , например:

# 7-zip archive type, strongest (9) compression, methods PPMd, BCJ2, LZMA2 $ 7z a -t7z -mx=9 -m0=PPMd -m1=BCJ2 -m2=LZMA2 myarchive.7z somefile.xml 

Все методы каким-либо образом используются или, по крайней мере, указаны в метаданных:

  • Как перезаписать существующий файл в 7zip?
  • Как сделать файл 7za без указания имени архива
  • Почему ZIP Compression ничего не сжимает?
  • Можно ли выполнить файл после извлечения из архива самораспаковывающегося архива 7-Zip (SFX)?
  • Сжать файл в формате pdf?
  • Как сжать весь диск C в Windows, включая заблокированные файлы?
  •  $ 7z l -slt myarchive.7z 7-Zip [64] 9.22 beta Copyright (c) 1999-2011 Igor Pavlov 2011-04-18 Listing archive: myarchive. 7z -- Path = myarchive.7z Type = 7z Method = LZMA2 PPMD BCJ2 [..] ---------- Path = somefile.xml [..] Method = PPMD:o32:mem192m BCJ2 LZMA2:48m Block = 0 

    Кажется, он не запускает файл через все три метода, выбирая лучшее. Скорее, он, по-видимому, всегда выбирает первый, так как изменение порядка метода существенно влияет на размер файла.

    Даже если я добавляю несколько файлов, например один XML-файл (PPMd дает наилучшее сжатие) и один двоичный файл (LZMA2), он по-прежнему отображает все методы для обоих файлов и не переключается динамически на файл.

    Фактически, в документации конкретно говорится, что «вы можете использовать любое количество методов», но это не говорит о том, почему .

    То, что я пытаюсь достичь, – это «файл с несколькими файлами», чтобы выбрать «лучший вариант». Я могу, конечно, вручную добиться этого с помощью небольшого сценария, но, предположительно, методы сжатия цепей должны делать именно это?

  • CMD MOVE не может заменить каталоги в WIN 7
  • Запустить повышенную командную строку в% UserProfile% по умолчанию?
  • Хорошая альтернатива Cygwin с копией / вставкой?
  • Как узнать версию Mac OS X от терминала?
  • Как отключить перенос слов меньше
  • Есть ли ярлык клавиатуры для закрытия окна командной строки?
  • 2 Solutions collect form web for “Что делает комбинирование методов сжатия в 7z?”

    Как правило, сжатые данные не могут быть сжаты (далее) эффективно. После применения первого метода сжатия размер файла не может быть значительно уменьшен.

    -mN=X в основном для указания фильтров (взятых из файла справки Windows):

    Поддерживаемые фильтры:

    Delta Delta filter («В байтах можно установить смещение по треугольнику.Например, чтобы сжать 16-битные стерео WAV-файлы, вы можете установить« 0 = Delta: 4 ». Дельта-сдвиг по умолчанию равен 1.»)

    Конвертер BCJ для исполняемых файлов x86

    BCJ2 для исполняемых файлов x86 (версия 2) («BCJ2 – это преобразователь Branch для 32-разрядных исполняемых файлов x86 (версия 2). Он преобразует некоторые инструкции для расширения для дальнейшего сжатия».)

    Конвертер ARM для исполняемых файлов ARM (little endian)

    Конвертер ARMT для исполняемых файлов ARM Thumb (little endian)

    Конвертер IA64 для исполняемых файлов IA-64

    Конвертер PPC для исполняемых файлов PowerPC (big endian)

    Преобразователь SPARC для исполняемых файлов SPARC

    Также из файла справки расширенный пример, использующий несколько выходных потоков фильтра BCJ2:

     7z a -t7z archive.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d23 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 

    Добавляет файлы * .exe и * .dll в архив archive.7z с использованием конвертера BCJ2, LZMA с 8 MB словарем для основного выходного потока (s0) и LZMA с 512 KB словарем для s1 и s2 выходных потоков BCJ2.

    Кажется, вы можете применять фильтры в последовательности.

    Это сообщение из прошлого года имеет приятное объяснение:

    Что означает номер после 7-zip -m-переключателя?

    Этот номер позволяет вам установить порядок операций сжатия, если вы используете более одного раза.

    Это пример из документации:

     7z a a.7z *.exe *.dll -m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1 -mb0s1:2 -mb0s2:3 

    Добавляет файлы * .exe и * .dll для архивации a.7z с использованием фильтра BCJ2, LZMA с 32 MB словарем для основного выходного потока (s0) и LZMA с 512 KB словарем для s1 и s2 выходных потоков BCJ2.

    Первое сжатие – это самое низкое число, которое равно нулю. В этом примере ноль устанавливается в BCJ2. Затем идет один, который является LZMA. Два и три также LZMA, но они используют разные d-параметры.

    Опция -mb используется для «связывания» вывода с одного сжатия на вход другого. В этом примере BCJ2 имеет один вход и четыре выхода. Выходной ноль идет на сжатие номер один. Выходной будет сжатие номер два. Два выхода идут на компрессию номер три. Вывод три не связан (потому что его не нужно снова сжимать).

    Давайте будем гением компьютера.