Вопрос или проблема
Операционная система – Windows.
Я могу использовать Winzip для архивации большой папки в разделенные zip-файлы. Например (маленькие разделы для обсуждения):
k:\abc\def\myroot… содержит 100MB, и Winzip с лимитом раздела 5MB архивирует в
myroot.z01
myroot.z02
myroot.z03
myroot.z04
myroot.zip
Разделы перемещаются в другое место, которое принимает только .zip файлы, и согласно Winzip, похоже, что .z## файлы не могут быть открыты другими программами для распаковки
Есть ли способ с помощью Winzip или, возможно, powershell создать независимые архивы, которые в совокупности покрывают ‘root’?
myroot_1of6.zip
myroot_2of6.zip
myroot_3of6.zip
myroot_4of6.zip
myroot_5of6.zip
myroot_6of6.zip
Ни один из отдельных файлов не будет сжат до размера больше лимита раздела. В худшем случае это что-то вроде сжатия папки 1.75 TiB в N zip-файлов менее 50GiB каждый.
.
Ответ или решение
Архивирование большого дерева каталогов в отдельные zip-файлы может представлять собой сложность, особенно в среде Windows, где возможности встроенных инструментов может не хватать для специфичных задач, таких как создание независимых архивов вместо непрерывных частей одного архива. В этой ситуации мы рассмотрим стратегии, которые могут быть применены для достижения цели с использованием WinZip, PowerShell и других средств.
Теория
Основная задача заключается в создании нескольких независимых zip-архивов, охватывающих целиком содержимое корневого каталога, где каждый из архивов имеет ограничение по размеру, например, не более 50 ГиБ. Эта задача имеет несколько подводных камней, таких как совместимость архивов с различными программами для распаковки и необходимость автоматизации процесса для больших объемов данных (например, 1,75 ТиБ).
WinZip предлагает возможность создания архивов с разделением (split), однако, как было заметно, такие архивы часто представляют собой единую сущность, что препятствует их использованию в системах, принимающих только файлы с расширением .zip.
Пример
Предположим, что у нас есть директория k:\abc\def\myroot, содержащая 1,75 ТиБ данных, и необходимо создать несколько zip-файлов, каждый из которых не превышает 50 ГиБ. Ни один из отдельных файлов внутри не превышает указанное ограничение по размеру. За основу возьмем такие примеры:
- WinZip: хотя он позволяет создавать .z## части, мы ищем способ получить независимые архивы.
- PowerShell: может использоваться для автоматизации процесса архивации и разделения данных на части.
Применение
-
WinZip: Для достижения цели с использованием WinZip без создания зависимых частей, вы можете иcпользовать пакетную обработку и/или скрипт на языке, поддерживающем автоматизацию, например Python или VBA, которые будут обрабатывать каждый файл/подкаталог отдельно. Однако, это не всегда эффективно для больших объемов данных и может требовать значительных временных затрат.
-
PowerShell: Использование скриптовых возможностей PowerShell открывает широкие возможности для автоматизации и настройки процесса. Вот пример возможного скрипта для создания независимых архивов:
param( [string]$SourceFolder = "K:\abc\def\myroot", [string]$DestinationFolder = "K:\archives", [int]$MaxArchiveSizeGB = 50 ) $files = Get-ChildItem -Path $SourceFolder -Recurse | Sort-Object Length -Descending $currentSize = 0 $archiveIndex = 1 $archiveFiles = @() foreach ($file in $files) { if (($currentSize + $file.Length) -ge ($MaxArchiveSizeGB * 1GB)) { Compress-Archive -Path $archiveFiles -DestinationPath "$DestinationFolder\myroot_$archiveIndex.zip" $archiveIndex++ $archiveFiles = @() $currentSize = 0 } $archiveFiles += $file.FullName $currentSize += $file.Length } # Archive remaining files if ($archiveFiles.Count -gt 0) { Compress-Archive -Path $archiveFiles -DestinationPath "$DestinationFolder\myroot_$archiveIndex.zip" }
Этот скрипт автоматически делит файлы на архивы, не превышающие 50 ГиБ. Он создает независимые zip-файлы, которые можно распаковать любой стандартной программой, поддерживающей формат zip.
-
Дополнительные инструменты:
- 7-Zip: Альтернатива WinZip, поддерживающая более широкую совместимость с различными распаковщиками и предлагающая командную строку для автоматизации.
- Python: Используя библиотеки вроде
shutil
иos
, вы можете писать более сложные скрипты с возможностью интеграции более продвинутых алгоритмов разделения и сжатия.
Каждый из методов имеет свои преимущества и ограничения, и выбор средства зависит от конкретной ситуации, желаемого уровня автоматизации и доступных ресурсов. Лучшим подходом может быть комбинация PowerShell с дополнительными утилитами, обеспечивающая максимальную гибкость и эффективность. Таким образом вы получите управляемый процесс, соответствующий вашим специфическим нуждам.