zip и cross-platform обмен
tar.gz, tar.zst — UNIX-native. На Windows у пользователей zip — другой формат. Когда DE нужно обмениваться файлами с не-Linux пользователями (бизнес-клиенты, юристы, marketing) — обычно используется zip.
В этом уроке: zip, unzip, их особенности, и где они нужны DE.
zip vs tar.gz: главные отличия
Разные форматы для разных целевых аудиторий
Правило: обмен с не-Linux — используем zip. Внутри Linux/DE-команды — tar.gz или tar.zst.
zip — создание
# Установка (Ubuntu/Debian)
sudo apt install zip unzip
# Установка (RHEL/Fedora)
sudo dnf install zip unzip
# Запаковать файл
zip archive.zip file.txt
# Запаковать директорию (recursively)
zip -r archive.zip directory/
# Несколько файлов
zip archive.zip file1.txt file2.csv file3.json
# С компрессией level 9 (default 6)
zip -9 archive.zip large.csv
# Без compression (быстрее, store mode)
zip -0 archive.zip already-compressed.gz
unzip — извлечение
# Базовая распаковка
unzip archive.zip
# В конкретную директорию
unzip archive.zip -d /tmp/extract-here/
# Только конкретные файлы
unzip archive.zip file1.txt file2.csv
# Без перезаписи существующих
unzip -n archive.zip
# С перезаписом без вопросов
unzip -o archive.zip
# Список содержимого
unzip -l archive.zip
# Подробный список (с CRC, modified time)
unzip -v archive.zip
# Тест архива (проверить integrity)
unzip -t archive.zip
Просмотр без распаковки
# Список файлов
unzip -l report.zip
# Output:
# Archive: report.zip
# Length Date Time Name
# --------- ---------- ----- ----
# 1024 2026-05-13 14:23 data/users.csv
# 2048 2026-05-13 14:23 data/orders.csv
# 3072 2026-05-13 14:23 data/summary.json
# --------- -------
# 6144 3 files
# Подробно — с CRC, methods, ratios
unzip -v report.zip
# Прочитать один файл из архива без полной распаковки
unzip -p report.zip data/users.csv
# -p = print to stdout
# Можно сразу в pipe!
unzip -p report.zip data/users.csv | head
unzip -p report.zip data/users.csv | awk -F',' '{print $3}'
Password protection
# Создать с паролем (запросит интерактивно)
zip -e secrets.zip sensitive.txt
# С паролем в команде (видно в history — небезопасно)
zip -P "mypassword" secrets.zip sensitive.txt
# Распаковать
unzip secrets.zip
# Введите пароль
# Или в команде
unzip -P "mypassword" secrets.zip
zip encryption — слабая! Используется PKZIP encryption (ZipCrypto) — был сломан в 1990-х. Современный zip также поддерживает AES-256, но это unofficial extension, не все программы поддерживают.
Никогда не используйте zip password для real secrets (database credentials, API keys, customer PII). Для real secrets — GPG, age, или secret manager.
# Лучше: GPG encryption
tar czf - data/ | gpg -c > data.tar.gz.gpg
# Расшифровка
gpg -d data.tar.gz.gpg | tar xzf -DE-сценарии
1. Получили weekly report как .zip от клиента
# Структура
unzip -l weekly-2026-W19.zip
# data/sales.csv
# data/customers.csv
# data/orders.csv
# Распаковать в data lake
mkdir -p /data/import/weekly-2026-W19
unzip weekly-2026-W19.zip -d /data/import/weekly-2026-W19/
# Или сразу прочитать один файл в pipe для ETL
unzip -p weekly-2026-W19.zip data/sales.csv | \
awk -F',' 'NR > 1 {sum += $5} END {print "Total sales:", sum}'
2. Подготовка отчёта для бизнеса (они на Windows)
# Сгенерировали отчёт
python generate_report.py > /tmp/report.csv
cp dashboard.png /tmp/
# Запаковать в zip для отправки business-users
zip /tmp/monthly-report-$(date +%Y-%m).zip /tmp/report.csv /tmp/dashboard.png
# Отправить через email или Slack
3. Sharing data dump с partner
# Создать password-protected zip (note: weak, лучше GPG)
zip -re partner-data-2026-05.zip data/ -P "agreedPassword123"
# Передать через secure channel
scp partner-data-2026-05.zip [email protected]:/inbox/
4. Batch обработка ZIPов с веба
# Скачали 12 ZIP файлов
ls
# 2026-01.zip 2026-02.zip ... 2026-12.zip
# Распаковать все в один target
for zip in *.zip; do
unzip "$zip" -d /tmp/all-data/
done
# Альтернатива — параллельно
ls *.zip | xargs -P 4 -I {} unzip {} -d /tmp/all-data/
Подводные камни
1. Структура внутри zip
ZIP — flat archive (каждый файл с полным path), без концепции «top-level директории». Создавая, обращай внимание:
# Плохо — все файлы окажутся в текущей директории при распаковке
cd /tmp/data
zip ../data.zip *.csv
unzip data.zip # все CSV в текущую директорию, mess
# Хорошо — обернуть в директорию
cd /tmp
zip -r data.zip data/
unzip data.zip # создаст data/ с файлами внутри
2. Большие файлы (> 4GB) и ZIP64
Старый формат ZIP ограничен 4GB на файл. Современные zip-утилиты используют ZIP64 extension — без лимита. Но если получатель использует старый софт (например, ZIP-tools из 2010-х на Windows XP) — могут быть проблемы.
# Проверить, использует ли архив ZIP64
unzip -l huge.zip | head
# Если упоминается ZIP64 — нужны современные tools на receiving stronе
Для файлов > 4GB лучше использовать tar.gz или tar.zst.
3. Symlinks и permissions
ZIP менее богат метаданными, чем tar:
- Symlinks: zip может хранить как файл-с-таргетом, но не все unzip-утилиты respect это.
- Permissions: zip хранит, но Windows-утилиты часто их игнорируют.
Если важно сохранить symlinks и unix permissions — используйте tar.gz, не zip.
7z и rar — другие cross-platform форматы
Бывают у получателей. Для extract:
# 7z (нужен p7zip)
sudo apt install p7zip-full
7z x archive.7z
# RAR — пакет unrar
sudo apt install unrar
unrar x archive.rar
В DE-сценариях встречаются редко. ZIP — стандарт для обмена.
ZIP vs tar.gz — сравнительная таблица для DE
Принятие решения для типичных DE-задач
Попробуй сам
# 1. Создать тестовую структуру
mkdir -p /tmp/zip-test/data
echo "name,value" > /tmp/zip-test/data/file1.csv
echo "alice,100" >> /tmp/zip-test/data/file1.csv
echo "bob,200" >> /tmp/zip-test/data/file1.csv
echo "more,data" > /tmp/zip-test/data/file2.csv
# 2. Запаковать
cd /tmp/zip-test
zip -r data.zip data/
ls -lh data.zip
# 3. Просмотр
unzip -l data.zip
unzip -v data.zip
# 4. Прочитать один файл без распаковки
unzip -p data.zip data/file1.csv
# 5. Распаковка в другую директорию
unzip data.zip -d /tmp/extracted/
ls -R /tmp/extracted/
# 6. С паролем
zip -e secret.zip data/file1.csv
# Введи пароль
unzip secret.zip -d /tmp/secret-extract/
# Введи пароль
# 7. Сравнить размеры
zip -9 max.zip data/file1.csv
zip -0 store.zip data/file1.csv
gzip -k -9 -c data/file1.csv > min.gz
ls -lh max.zip store.zip min.gz data/file1.csv
# 8. Cleanup
rm -rf /tmp/zip-test /tmp/extracted /tmp/secret-extract
Cross-link: предыдущий урок 02 — gzip/zstd/xz. Следующий урок 04 — production workflows. Модуль 11 — передача файлов через rsync/scp.