solovyov.net

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

Мораль: підстава приходить звідки не чекаєш.

(@ tg)