К сожалению, чтобы распаковать отдельный элемент .tar.gz
архива, вам нужно обработать весь архив, и не так уж много вы можете сделать, чтобы это исправить.
Именно здесь .zip
(и некоторые другие форматы, например .rar
) архивы работают намного лучше, потому что zip
формат имеет центральный каталог всех файлов, содержащихся в нем, с прямыми смещениями, указывающими на середину zip
файла, так что элементы архива могут быть быстро извлечены без обработки всей информации.
Вы можете спросить, почему обработка .tar.gz
идет так медленно?
.tar.gz
(часто сокращается как .tgz
) просто .tar
архив с gzip
компрессором. gzip
потоковый компрессор, который может работать только с одним файлом Если вы хотите получить какую-либо часть gzip
потока, вы должны распаковать ее целиком, и это то, что действительно убивает ее .tar.gz
(и для .tar.bz2
, .tar.xz
и другие подобные форматы, основанные на .tar
).
.tar
Формат на самом деле очень, очень простой. Это просто поток 512-байтовых заголовков файла или каталога (имя, размер и т. Д.), За которыми следует содержимое файла или каталога (дополняется до 512 блоков размером с 0 байтами, если необходимо). Когда вы видите полностью нулевой блок 512 для заголовка, это означает конец .tar
архива.
Некоторые люди думают, что даже .tar
члены архива не могут быть доступны быстро, но это не совсем так. Если в .tar
архиве мало больших файлов, вы можете быстро перейти к следующему заголовку, и, таким образом, вы можете найти нужного члена архива за несколько поисков (но все же может потребоваться столько поисков, сколько имеется членов архива). Если ваш .tar
архив содержит множество крошечных файлов, это означает, что быстрый поиск элементов становится практически невозможным даже для несжатых файлов .tar
.