Helionix

Как конвертировать GZ в ZIP и не перепутать его с TAR.GZ

Разбираемся, как снять слой GZIP, определить одиночный файл или TAR, создать ZIP, проверить CRC и безопасно восстановить имя.

Файл .gz обычно содержит один сжатый поток, а ZIP является контейнером с каталогом записей. Поэтому преобразование GZ в ZIP выполняется в два этапа: GZIP декодируется до исходного файла, затем этот файл записывается как элемент нового ZIP. Если внутри GZ находится TAR, правильнее распознать TAR.GZ и перенести всё дерево.

Откройте конвертер архивов Helionix, выберите GZ и укажите ZIP. Перед созданием результата проверьте определённое имя исходного файла и тип декодированного потока.

Одиночный GZ и TAR.GZ — разные случаи

ИсходникПосле снятия GZIPРезультат ZIP
log.txt.gzОдин файл log.txtZIP с одной записью
backup.tar.gzTAR с деревом каталоговZIP со множеством записей
archive.tgzОбычно TARZIP со структурой TAR
GZ без имениОдин неизвестно названный потокНужно задать безопасное имя

Как выполнить конвертацию

  1. Сохраните копию GZ и проверьте его CRC.
  2. Определите, является ли декодированный поток TAR.
  3. Запустите преобразование GZ в ZIP.
  4. Проверьте предложенное имя результата.
  5. Если найден TAR, просмотрите дерево и предупреждения о ссылках.
  6. Создайте ZIP и скачайте его под новым именем.
  7. Откройте все записи и сравните исходный размер.
  8. Для важных данных сравните 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 за многокомпонентный архив.

Преобразовать GZ в ZIP →