zip та gzip обидва використовують алгоритм Deflate для стиснення файлів. Уявіть моє здивування, коли я сьогодні отримав .tgz
на 165 кілобайт і .zip
на 1.5 мегабайта. Подумав над причинами, знайшов що у поставці Мака є zipinfo
, і зацініть що мені каже zipinfo -v dump.zip
:
The central directory is 376417 (000000000005BE61h) bytes long
Точно! Чим .tar
менш зручний, аніж .zip
- в нього немає центрального списку файлів, і тому для пошуку одного файлу треба перебирати архів повністю. Але коли в твоєму архіві 3 тисячі файлів — це грає на руку, немає оцих окремих 376 кб списку файлів. Ну добре, а куди ще мегабайт подівся?
Це вже очевидно — заради того, щоб можна було швиденько один файл у .zip
знайти, кожен з цих файлів стиснений окремо. А .tgz
, очевидно, спочатку зібраний таром, а потім вже стиснений гзіпом — і коли ці файли дуже схожі (наприклад, це купа yaml-файлів, де ключі між собою дуже схожі), то це прям капець яку різницю дає. Я навіть перевірив, зробив .tar.zip
, і все зійшлося:
> ls -l --no-user --no-time --no-permissions dump.*
89k dump.tar.bz2
100k dump.tar.xz
165k dump.tar.zip
165k dump.tgz
1.5M dump.zip
Мораль: підстава приходить звідки не чекаєш.