К сожалению, чтобы распаковать отдельный элемент .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.