Почему tar-папка содержит несколько сжатых файлов размером с разархивированные файлы? - PullRequest
0 голосов
/ 30 января 2020

Учитывая следующую структуру папок (с размером в байтах в скобках):

- dir
  - f1.txt (1754)
  - f2.txt (9811)

Когда я запускаю gzip -r dir, я получаю:

 - dir
   - f1.txt.gz (654)
   - f2.txt.gz (804)

Теперь, когда я делаю tar -cf dir.tar dir (где dir содержит сжатые файлы), я ожидаю, что размер dir.tar будет примерно 654 + 804 = 1450. Но оказывается, что это 10240, это размер f1.txt + f2.txt! Почему ???

Ответы [ 2 ]

2 голосов
/ 31 января 2020

Давайте рассмотрим пример, чтобы подтвердить то, что вы видите.

Здесь у меня есть каталог, 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
0 голосов
/ 30 января 2020

Кажется, вы генерируете tar-файл как для оригинальных, так и для сжатых файлов. Чтобы убедиться в этом, вы можете перечислить содержимое файла tar.

tar -tf dir.tar.gz

Просто вы можете указать каталог tar + gzip следующим образом:

tar -zcvf dir.tar.gz dir/

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...