Файл .gz обычно содержит один сжатый поток, а ZIP является контейнером с каталогом записей. Поэтому преобразование GZ в ZIP выполняется в два этапа: GZIP декодируется до исходного файла, затем этот файл записывается как элемент нового ZIP. Если внутри GZ находится TAR, правильнее распознать TAR.GZ и перенести всё дерево.
Откройте конвертер архивов Helionix, выберите GZ и укажите ZIP. Перед созданием результата проверьте определённое имя исходного файла и тип декодированного потока.
Одиночный GZ и TAR.GZ — разные случаи
| Исходник | После снятия GZIP | Результат ZIP |
|---|---|---|
log.txt.gz | Один файл log.txt | ZIP с одной записью |
backup.tar.gz | TAR с деревом каталогов | ZIP со множеством записей |
archive.tgz | Обычно TAR | ZIP со структурой TAR |
| GZ без имени | Один неизвестно названный поток | Нужно задать безопасное имя |
Как выполнить конвертацию
- Сохраните копию GZ и проверьте его CRC.
- Определите, является ли декодированный поток TAR.
- Запустите преобразование GZ в ZIP.
- Проверьте предложенное имя результата.
- Если найден TAR, просмотрите дерево и предупреждения о ссылках.
- Создайте ZIP и скачайте его под новым именем.
- Откройте все записи и сравните исходный размер.
- Для важных данных сравните SHA-256 декодированного содержимого.
Откуда берётся имя файла
Заголовок GZIP может содержать необязательное исходное имя, но оно присутствует не всегда и не должно слепо использоваться как путь. Конвертер может взять безопасную базу из имени .gz, например превратить report.csv.gz в report.csv. Абсолютные пути, разделители и ../ необходимо удалить, а решение показать пользователю.
CRC и размер GZIP
В конце участника GZIP записаны CRC-32 декодированных данных и их размер по модулю 2³². Перед упаковкой в ZIP поток следует полностью прочитать и проверить. Если CRC не совпадает, конвертация не должна создавать внешне исправный ZIP без предупреждения: новый контейнер лишь скроет проблему исходного GZ.
Несколько GZIP members
Формат допускает последовательность участников, а декодеры обычно соединяют их декодированные потоки. Это не эквивалентно каталогу отдельных файлов: границы участников не всегда означают пользовательские записи. Конвертер должен придерживаться заявленной модели и объяснять, будет ли создан один объединённый файл или несколько элементов.
Почему размер ZIP может увеличиться
GZ и ZIP часто используют Deflate, но заголовки, параметры и стратегия сжатия различаются. Пересжатие уже оптимального потока после декодирования может дать немного больший результат. Это не потеря качества: сравнивайте исходные байты файла, а не размер двух контейнеров.
Когда лучше оставить GZ
Для Unix-журнала, дампа или потока, который потребляется программой напрямую, GZ может быть естественным форматом. ZIP выбирают ради интерфейса каталога, совместимости с Windows и возможности добавлять несколько независимых записей. Конвертация оправдана потребностями получателя, а не универсальным преимуществом одного формата.
Что делать с составным именем
Имя вроде report.csv.gz обычно подсказывает результат report.csv, но остаётся лишь подсказкой. Безопасный конвертер очищает необязательное имя из заголовка GZIP, не позволяет создать путь за пределами архива и показывает итог перед упаковкой. Если исходное имя отсутствует, задайте понятное имя вручную: это не изменит байты документа, зато упростит его дальнейшее использование.
Частые вопросы
Почему после GZ получился ZIP с одним файлом?
Это нормальное поведение: GZIP обычно сжимает один поток. Для нескольких файлов используется TAR.GZ.
Можно ли просто переименовать GZ в ZIP?
Нет. У форматов разные заголовки и структура; требуется декодирование и новая упаковка.
Изменится ли содержимое?
При корректной конвертации — нет. Подтвердите это SHA-256 исходного декодированного файла и записи ZIP.
Итог
Сначала определите, содержит GZ один файл или TAR. Проверьте GZIP CRC, безопасно восстановите имя, затем создайте ZIP и подтвердите данные хешем. Не принимайте одиночный поток GZIP за многокомпонентный архив.
