Давайте рассмотрим пример, чтобы подтвердить то, что вы видите.
Здесь у меня есть каталог, x
, с двумя файлами.
# ls -l x
total 12
-rw-r--r-- 1 root root 3902 Jan 30 17:00 log1.txt
-rw-r--r-- 1 root root 7518 Jan 30 17:00 log.txt
Сжатие файлов
# gzip -9v x/*
x/log1.txt: 90.6% -- replaced with x/log1.txt.gz
x/log.txt: 84.5% -- replaced with x/log.txt.gz
Убедитесь, что сжатие сработало
# ls -l x
total 8
-rw-r--r-- 1 root root 392 Jan 30 17:00 log1.txt.gz
-rw-r--r-- 1 root root 1195 Jan 30 17:00 log.txt.gz
Поместите файлы в tar, x.tar
# tar cvf x.tar x
x/
x/log1.txt.gz
x/log.txt.gz
и проверьте полученный размер. Я также получил 10240
.
# ls -l x.tar
-rw-r--r-- 1 root root 10240 Jan 31 09:02 x.tar
Причина довольно проста - формат tar работает с фиксированными размерами блоков, поэтому будет много дополнений до NULL байтов. Смотрите здесь для подробностей. При небольших размерах файлов эти байты заполнения будут доминировать. Если вы посмотрите на шестнадцатеричный дамп этого tar-файла, он содержит в основном пустые байты заполнения.
Вот почему лучше поместить несжатую версию файлов в tar, а затем сжать ее.
Вот пример.
Поместите несжатые файлы в x.tar
# ls -l x
total 12
-rw-r--r-- 1 root root 3902 Jan 30 17:00 log1.txt
-rw-r--r-- 1 root root 7518 Jan 30 17:00 log.txt
# tar cvf x.tar x
x/
x/log1.txt
x/log.txt
# ls -l x.tar
-rw-r--r-- 1 root root 20480 Jan 31 09:06 x.tar
Теперь сожмите файл tar. 1761
байтов намного лучше.
# gzip -9v x.tar
x.tar: 91.7% -- replaced with x.tar.gz
# ls -l x.tar.gz
-rw-r--r-- 1 root root 1761 Jan 31 09:06 x.tar.gz