Задать вопрос
@Drovosek01

Как запаковать несколько идентичных файлов в архив, чтобы они весили меньше чем 1 файл?

Есть папка с 6 идентичными файлами:

FLEngine_x64.dll
FLEngine_x64_Copy1.dll
FLEngine_x64_Copy2.dll
FLEngine_x64_Copy3.dll
FLEngine_x64_Copy4.dll
FLEngine_x64_Copy5.dll

У них одинаковых хэш md5. То есть это один и тот же файл, просто с разными именами.

1 dll файл имеет вес 56,0 МБ (58 773 224 байт)

При упаковке папки с этими файлами с помощью 7-zip 24.08 с такими настройками
spoiler
1927cec0dcc97cd20b47a769a3b02ded.png

Получается .7z архив размером ~247 МБ
https://mega.nz/file/fToEgJpY#9WaVLFoTs3XSWuABc-f1...

ПОЧЕМУ???
По сути это же 1 файл с разными именами и логично было бы, чтобы в архиве манипуляции (сжатие) производилось над 1 файлом, а остальные идентичные файлы никак не прибавляли размер архива, потому что при распаковке архиватор может же извлечь только 1 файл, потом продублировать его и изменить имена на соответствующие.
Логично было бы, если бы такой архив весил не более, чем размер 1 из всех идентичных файлов, то есть не более 56 МБ, но архив весит 247 МБ.

Вопрос:
Как и каким архиватором можно запаковать папку с идентичными файлами, чтобы архив весил не более размера 1 файла?
  • Вопрос задан
  • 149 просмотров
Подписаться 1 Средний 6 комментариев
Решения вопроса 1
@Drovosek01 Автор вопроса
При архивации в .rar через последний Winrar 7 - ситуация повторилась.

Написал в поддержку разработчикам Winrar на email (есть на официальном сайте) - они довольно оперативно ответили.
Есть 2 варианта решить проблему дедупликации файлов в архивах с помощью Winrar:

Вариант 1

При создании архива на вкладке "Options" отметить пункт "Save identical files as references"

66e1932e7b3a0431930696.png

Вариант 2

При создании архива в Winrar - необходимо в нем выбрать пункт
"Create solid archive"
а также размер словаря (Dictionary size) выставить больше, чем размер файла.
При этом размер словаря должен быть кратным 2 в степени n, то есть если файл размером 56 МБ - если вы выставите размер словаря 60 МБ, то дедупликация не сработает, необходимо выставить 64 МБ.

66e18929deaad148107564.png
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
2ord
@2ord
Архиваторы типа ZPAQ учитывают дубликаты.
Ответ написан
@rPman
Используй формат архива wim (поддерживается 7z) он учитывает дубликацию файлов (никогда не пользовался, но пишут что да).

Если речь идет о просто одинаковых кусках данных (файлы например отличаются только частью или содержат общие данные) то в пределах размера словаря (точнее там есть понятие окно или блока сжатия) можно включить solid mode (раньше была опция в интерфейсе, теперь только в командной строке -ms=on (почитай документацию там много вариантов), но это сработает только для файлов, которые попадут в оперативную память, достаточную для распаковки (там это сложно посчитать по параметрам, даже есть опция - какой процент памяти использовать).

При распаковки solid архива будет считываться и распаковываться весь архив (до тех пор пока не достигнет места хранения требуемого файла), когда как из обычного архива файл извлекается сразу вне зависимости от размера всего архива
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Обычные архиваторы скорее всего не делают дедубликации.

Но предварительно можно сделать такое
FLEngine_x64.dll
FLEngine_x64_Copy1.dll => symlink FLEngine_x64.dll
FLEngine_x64_Copy2.dll => symlink FLEngine_x64.dll
FLEngine_x64_Copy3.dll => symlink FLEngine_x64.dll
FLEngine_x64_Copy4.dll => symlink FLEngine_x64.dll
FLEngine_x64_Copy5.dll => symlink FLEngine_x64.dll


и попробовать zip/tar. Они вроде умеют симлинки оптимально хранить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы