Файлы tar.gz не имеют индекса. В отличие от zip или других форматов архивов, получить список содержащихся файлов или других метаданных не так просто и дешево. Чтобы показать, какие файлы содержатся в архиве, tar действительно должен распаковать архив и извлечь файлы, хотя в случае с -t
опцией это происходит только в памяти.
Если в вашем сценарии использования обычным способом является перечисление содержащихся файлов в архиве, вы можете рассмотреть возможность использования формата архива, который может добавить индекс файла к сжатому файлу, например, zip.
Возможно, вы также хотите взглянуть на формат HDF5 для более сложных сценариев.
измерения
Мне просто нужно было сделать несколько измерений, чтобы подтвердить свой ответ, и я создал несколько каталогов с большим количеством файлов в них и упаковал их, tar czf files#.tgz files#
и то , и другое zip -r files#.zip files#
.
Для тестов я дважды запускал команду распаковки и брал результат второго запуска, чтобы избежать измерения скорости диска.
Тест 1
Каталог, files1
содержащий 100 000 пустых файлов .
$ time tar tzf files1.tgz >/dev/null
tar tzf files1.tgz > /dev/null 0,56s user 0,09s system 184% cpu 0,351 total
$ time unzip -l files1.zip >/dev/null
unzip -l files1.zip > /dev/null 0,30s user 0,34s system 99% cpu 0,649 total
Зип здесь медленнее.
Тест 2
Каталог, files2
содержащий 5000 файлов с 512 байтами случайных данных каждый.
$ time tar tzf files2.tgz >/dev/null
tar tzf files2.tgz > /dev/null 0,14s user 0,03s system 129% cpu 0,131 total
$ time unzip -l files2.zip >/dev/null
unzip -l files2.zip > /dev/null 0,03s user 0,06s system 98% cpu 0,092 total
Все еще не убедительно, но на этот раз zip быстрее.
Тест 3
Каталог, files3
содержащий 5000 файлов с 5 КБ случайных данных каждый.
$ time tar tzf files3.tgz >/dev/null
tar tzf files3.tgz > /dev/null 0,42s user 0,03s system 111% cpu 0,402 total
$ time unzip -l files3.zip >/dev/null
unzip -l files3.zip > /dev/null 0,03s user 0,06s system 99% cpu 0,093 total
В этом тесте видно, что чем больше файлы, тем сложнее их перечислить tar.
Вывод
Мне кажется, что zip вносит небольшие накладные расходы, которые вы заметите только со многими очень маленькими (почти пустыми) файлами, тогда как для большого количества больших файлов он выигрывает конкурс при перечислении файлов, содержащихся в архиве.
-z
вариант:tar -tvfz
. Аналогично: что произойдет, если вы используете команду tar tvf вместо tar tvfz?