У меня есть tar.gz
файл 32 ГБ. Я пытался извлечь из него определенные папки, поэтому перечислил содержимое с помощью следующей команды для просмотра структуры файлов:
tar -tvf file.tar.gz > files.txt
Похоже, что список всех файлов занял целую вечность. Мой вопрос: флаг -t также извлекает файлы? Я знаю, что он не извлекается на диск, но количество времени, которое требуется, заставляет меня задуматься, обрабатывает ли он их в каком-то буфере.
command-line
tar
Саиф
источник
источник
-z
вариант:tar -tvfz
. Аналогично: что произойдет, если вы используете команду tar tvf вместо tar tvfz?Ответы:
Файлы tar.gz не имеют индекса. В отличие от zip или других форматов архивов, получить список содержащихся файлов или других метаданных не так просто и дешево. Чтобы показать, какие файлы содержатся в архиве, tar действительно должен распаковать архив и извлечь файлы, хотя в случае с
-t
опцией это происходит только в памяти.Если в вашем сценарии использования обычным способом является перечисление содержащихся файлов в архиве, вы можете рассмотреть возможность использования формата архива, который может добавить индекс файла к сжатому файлу, например, zip.
Возможно, вы также хотите взглянуть на формат HDF5 для более сложных сценариев.
измерения
Мне просто нужно было сделать несколько измерений, чтобы подтвердить свой ответ, и я создал несколько каталогов с большим количеством файлов в них и упаковал их,
tar czf files#.tgz files#
и то , и другоеzip -r files#.zip files#
.Для тестов я дважды запускал команду распаковки и брал результат второго запуска, чтобы избежать измерения скорости диска.
Тест 1
Каталог,
files1
содержащий 100 000 пустых файлов .Зип здесь медленнее.
Тест 2
Каталог,
files2
содержащий 5000 файлов с 512 байтами случайных данных каждый.Все еще не убедительно, но на этот раз zip быстрее.
Тест 3
Каталог,
files3
содержащий 5000 файлов с 5 КБ случайных данных каждый.В этом тесте видно, что чем больше файлы, тем сложнее их перечислить tar.
Вывод
Мне кажется, что zip вносит небольшие накладные расходы, которые вы заметите только со многими очень маленькими (почти пустыми) файлами, тогда как для большого количества больших файлов он выигрывает конкурс при перечислении файлов, содержащихся в архиве.
источник