Сжатие папки с множеством дублированных файлов
У меня есть довольно большая папка (~10 ГБ), которая содержит много дублированных файлов по всему дереву каталогов. Многие из этих файлов дублируются в 10 раз. Дублированные файлы находятся не рядом, а в разных подкаталогах.
Как мне сжать папку, чтобы она была достаточно маленькой?
Я пытался использовать Winrar в режиме "Best", но он вообще не сжимал его. (Довольно странно)
Будет ли zip\tar\cab\7z\ любой другой инструмент сжатия работать лучше?
Я не против позволить инструменту работать в течение нескольких часов - но не больше.
Я скорее не делаю это программно сам
6 ответов
WinRAR сжимает по умолчанию каждый файл отдельно. Таким образом, нет никакой реальной выгоды от сжатия структуры папок со многими подобными или даже идентичными файлами по умолчанию.
Но есть также возможность создать солидный архив. Откройте справку WinRAR и откройте на вкладке " Содержание " пункт " Типы и параметры архива" и нажмите " Твердые архивы". На этой странице справки объясняется, что такое надежный архив и какие преимущества и недостатки имеет этот формат файла архива.
Твердый архив с большим размером словаря в сочетании с лучшим сжатием может сделать файл архива со списком похожих файлов очень маленьким. Например, у меня есть список из 327 двоичных файлов с размерами файлов от 22 КБ до 453 КБ, которые в общей сложности 47 МБ не включают размер кластера раздела. Я могу сжать эти 327 похожих, но не идентичных файлов в RAR-архив со словарем размером 4 МБ, имеющим всего 193 КБ. Это, конечно, резкое сокращение размера.
Перейдите по ссылке на страницу справки о rarfiles.lst после прочтения страницы справки о солидном архиве. Он описывает, как вы можете контролировать, в каком порядке файлы помещаются в сплошной архив. Этот файл находится в папке программных файлов WinRAR и, конечно, может быть настроен в соответствии с вашими потребностями.
Вы также должны позаботиться об опциях Files для хранения без сжатия в случае использования версии WinRAR с графическим интерфейсом. Эту опцию можно найти после нажатия на символ / команду Добавить на вкладке Файлы. Существуют определенные типы файлов, которые просто хранятся в архиве без какого-либо сжатия, например *.png, *.jpg, *.zip, *.rar, ... Эти файлы обычно уже содержат данные в сжатом формате, и поэтому это не так. имеет смысл сжать их еще раз. Но если в структуре папок существуют дубликаты *.jpg и создается сплошной архив, имеет смысл удалить все расширения файлов из этой опции.
Кстати, есть такие приложения, как Total Commander, UltraFinder или UltraCompare и другие, которые поддерживают поиск дубликатов файлов по различным, выбираемым пользователем критериям, таким как поиск файлов с одинаковыми именами и одинаковым размером, или наиболее безопасными, поиск файлов с одинаковым размером и одинаковым содержимым. и предоставляя функции для удаления дубликатов.
Лучшие варианты в вашем случае это 7-zip. Вот варианты:
7za a -r -t7z -m0=lzma2 -mx=9 -mfb=273 -md=28 -ms=8g -mmt=on -mqs=on -bt -bb3 archife_file_name.7z /path/to/files
a
- добавить файлы в архив
-r
- Переписать подкаталоги
-t7z
- Установить тип архива (7z в вашем случае)
-m0=lzma2
- Установите метод сжатия на LZMA2. LZMA по умолчанию и общий метод сжатия формата 7z. Основные особенности метода LZMA:
- Высокая степень сжатия
- Переменный размер словаря (до 4 ГБ)
- Скорость сжатия: около 1 МБ / с на процессоре 2 ГГц
- Скорость распаковки: около 10-20 МБ / с на процессоре 2 ГГц
- Небольшие требования к памяти для распаковки (зависят от размера словаря)
- Небольшой размер кода для распаковки: около 5 КБ
- Поддержка многопоточности и гиперпоточности P4
-mx=9
- Устанавливает уровень сжатия. x=0 означает режим копирования (без сжатия). х =9 - ультра
-mfb=273
- Устанавливает количество быстрых байтов для LZMA. Он может быть в диапазоне от 5 до 273. Значение по умолчанию составляет 32 для нормального режима и 64 для максимального и ультра режимов. Обычно большое число дает немного лучшую степень сжатия и замедляет процесс сжатия.
-md=29
- Устанавливает размер словаря для LZMA. Вы должны указать размер в байтах, килобайтах или мегабайтах. Максимальное значение размера словаря составляет 1536 МБ, но 32-битная версия 7-Zip позволяет указывать до 128 МБ словаря. Значения по умолчанию для LZMA: 24 (16 МБ) в обычном режиме, 25 (32 МБ) в максимальном режиме (-mx=7) и 26 (64 МБ) в ультра-режиме (-mx=9). Если вы не укажете какой-либо символ из набора [b|k|m|g], размер словаря будет рассчитываться как DictionarySize = 2^ Размер байтов. Для распаковки файла, сжатого методом LZMA с размером словаря N, вам нужно около N байтов доступной памяти (RAM).
я использую md=29
потому что на моем сервере есть только 16 Гб оперативной памяти. при использовании этих настроек 7-zip занимает всего 5 Гб при архивировании любого размера каталога. Если я использую больший размер словаря - система переходит на обмен.
-ms=8g
- Включает или отключает сплошной режим. Режим по умолчанию s=on
, В сплошном режиме файлы сгруппированы вместе. Обычно сжатие в твердотельном режиме улучшает степень сжатия. В вашем случае это очень важно, чтобы размер блока был как можно больше.
Ограничение размера сплошного блока обычно уменьшает степень сжатия. Обновление твердых архивов.7z может быть медленным, поскольку может потребоваться некоторое повторное сжатие.
-mmt=off
- Устанавливает режим многопоточности на OFF. Вы должны отключить его, потому что нам нужны одинаковые или идентичные файлы для обработки одним и тем же 7-zip-потоком в одном блоке. Недостатком является медленное архивирование. Не имеет значения, сколько процессоров или ядер у вашей системы.
-mmtf=off
- Установите режим многопоточности для фильтров в положение OFF.
-myx=9
- Устанавливает максимальный уровень анализа файлов, анализ всех файлов (дельта и исполняемые фильтры).
-mqs=on
- Сортировка файлов по типу в твердых архивах. Хранить одинаковые файлы вместе.
-bt
- показать статистику времени выполнения-bb3
- установить уровень выходного журнала
7-zip поддерживает формат файла WIM, который обнаруживает и "сжимает" дубликаты. Если вы используете 7-zip GUI, вы просто выбираете формат файла 'wim'.
Только если вы используете командную строку 7-zip, посмотрите этот ответ. https://serverfault.com/questions/483586/backup-files-with-many-duplicated-files
Я предлагаю 3 варианта, которые я пробовал (в Windows):
- Сжатие 7zip LZMA2 с размером словаря 1536 Мб
- WinRar "сплошной" файл
- WIM-файл 7zip
У меня было 10 папок с разными версиями веб-сайта (с такими файлами, как .php, .html, .js, .css, .jpeg, .sql и т. Д.) Общим размером 1 ГБ (в среднем 100 МБ на папку). В то время как стандартное сжатие 7zip или WinRar дало мне файл размером около 400/500 МБ, эти опции дали мне файл (1) 80 МБ, (2) 100 МБ и (3) 170 МБ соответственно.
Дублированные файлы имеют одинаковые имена? Они обычно меньше 64 МБ? Затем вы должны отсортировать по имени файла (без пути), использовать tar
архивировать все файлы в указанном порядке в .tar
файл, а затем использовать xz
сжать, чтобы сделать .tar.xz
сжатый архив. Дублированные файлы, которые находятся рядом с .tar
файл и меньше, чем размер окна для xz
используемый уровень сжатия должен сжиматься практически до нуля. Вы можете увидеть размеры словарей "DictSize" для уровней сжатия в этом xz
справочная страница. Они варьируются от 256 КБ до 64 МБ.
Попробуйте eXdupe с www.exdupe.com, он использует дедупликацию и настолько быстр, что практически связан с дисковым вводом / выводом