8

Я ищу способ сжать большую папку во многие файлы 20 МБ. Я не хочу, чтобы почтовый файл разбивался на более мелкие. Вместо этого я хочу сгруппировать некоторые подфайлы / папки в группы, размер которых составляет 20 Мб в сжатом виде.

Если вы знаете, как это сделать, пожалуйста, помогите!

Обновить

Мне нужно использовать только меньшие заархивированные файлы, которые можно разархивировать в одиночку.

Я намерен использовать virustotal.com для сканирования большой папки.

7 ответов7

8

В winzip: добавьте файлы в zip-архив, запустив winzip и добавив или перетащив его в winzip или щелкнув правой кнопкой мыши по файлам и winzip 'add to zip ...'

Тогда в winzip:

Действия - Разделите в нижней части «Размер детали» выберите «Другой размер», затем поставьте 20 и выберите МБ

Готово!

6

То, что вы предлагаете, - это, по сути, разновидность проблемы рюкзака, с добавленной особенностью, заключающейся в том, что из-за сжатия файла вы не начнете знать, сколько из вашего 20-мегабайтного "рюкзака" займет каждый элемент.

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

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

Предполагая, что у вас есть язык сценариев, доступный для вас, и вы знаете, как его использовать, я ожидаю, что этот подход будет довольно простым для автоматизации; делать это вручную было бы довольно утомительно, если у вас есть более чем несколько файлов, чтобы иметь дело с ...

5

Позволить zip сделать разбиение для вас будет гораздо проще, чем пытаться понять это самостоятельно. Если ваша цель - zip-файлы размером 20 МБ, вам необходимо оценить сжатый размер каждого файла перед добавлением его в архив. Есть ли причина, по которой вы не хотите просто позволять zip делать разбиение для вас? Вот как вы можете сделать это с помощью gnu zip:

zip -s 20m -r myzip.zip mydir

Это создаст 20 МБ сжатых файлов с инкрементными индексными номерами в имени файла.

3

В Linux есть программа с именем zipsplit, которая делает именно это. Это часть стандартного пакета Zip.

Это можно запустить так:

zipsplit bigfile.zip -n 20000000

разделить bigfile.zip на части размером не более 20 МБ. И обратите внимание, что отдельные содержащиеся файлы не будут разделены. Таким образом, каждая часть может быть расстегнута индивидуально. Это также означает, что если существует один файл, который не может вписаться в максимальный размер детали, разделение будет невозможно.

Обновление: Похоже, на info-zip.org также есть бинарные файлы для Windows, в частности, в ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip для Win 64.

3

Боюсь, нелегкая перспектива.

Недавно я написал скрипт для сбора файлов в подкаталоги размером не более 4,3 ГБ для удобного хранения на DVD, но все это было без сжатия.

Делать это со сжатием - теперь есть проблема. Вы не можете предсказать размер файлов после сжатия - все, что вы можете сделать, это добавлять файлы в zip в порядке убывания размера, пока он не превысит 20 МБ, а затем удалить последний файл, заменив его меньшим, пока он не упадет ниже 20 МБ. , Если вы исчерпали все файлы и они все еще имеют размер> 20 МБ, просто отбросьте последний файл и переходите к следующему zip.

Довольно сложный сценарий и довольно медленный, болезненный процесс.

2

Я знаю, что это старая тема, но я только что сделал это с 7-Zip.

Вам нужно использовать опцию "Split to Volume":

1

Дэйв, казалось, дал самое близкое программируемое решение к тому, что запросил OP. Я понял, что это можно сделать и вручную , если принять следующие допущения (это не чисто техническая проблема - это скорее организационная проблема, чем техническая):

  1. Поскольку OP требует, чтобы каждый zip-файл мог извлекать все его содержимое независимо, файлы, размер которых превышает 20 МБ после архивирования, должны обрабатываться одним из следующих способов:
    • они не должны рассматриваться, и поэтому должны быть отделены;
    • их нужно разделить на тома по 20 МБ, как предлагали другие ответы (winzip, 7-zip), и полученные файлы нельзя использовать независимо (нарушая это первое предположение).
  2. Заархивированные файлы не обязательно должны иметь ровно 20 МБ.
  3. Если более важно иметь несколько zip-файлов с приблизительным размером 20 МБ, то сжатие может быть выполнено без сжатия.

Используя этот метод с 7-zip (интерфейс и терминал Windows), я сохранил сжатие во вновь созданных zip-файлах.

Начните с архивирования всех файлов в один zip-файл в пустой папке (с желаемым методом сжатия), например, ALL.zip , и откройте его:

  1. Упорядочить список файлов и папок, нажав на столбец размера или упакованного размера (сжатый);
  2. Начните с самых маленьких размеров и выберите файлы / папки, которые вы хотите сгруппировать в zip;
  3. Нажмите кнопку Test , чтобы подтвердить их общий размер (это учитывает их сжатие): Тестовая функция
  4. Нажмите кнопку « Extract или « Copy , добавляя в конец пути извлечения имя новой папки (например, plu_8MB)
  5. Внутри zip- ALL.zip удалите только что извлеченные файлы (избегая ошибочных повторных извлечений) и перейдите к следующей папке или подмножеству файлов;
  6. Повторите одно из следующих действий:
    • шаги с 1 по 5, если вы планируете создать независимый zip-файл;
    • шаги с 1 по 3 и повторное использование одного и того же имени папки (шаг 4) до тех пор, пока их общие размеры не станут примерно 20 МБ;
  7. После того, как вы извлекли все содержимое ALL.zip в независимые папки, удалите этот zip и откройте терминал в этой папке ;
  8. Тип:

    for /F %i in ('dir /b') do "C:\Program Files\7-zip\7z.exe" a -tzip %i.zip %i
    

    Нажмите ENTER, и это сгенерирует zip-файл для каждой папки, которую вы только что извлекли.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .