У меня есть a tar.gz
файл 32 ГБ. Я пытался извлечь определенные папки из него так, я перечислил содержание со следующей командой для просмотра структуры файлов:
tar -tvf file.tar.gz > files.txt
Это, кажется, берет навсегда для списка всех файлов. Моим вопросом является-t, отмечает, извлекают файлы также? Я знаю, что это не извлекает на диске, но количестве времени, которое это занимает, заставляет меня задаться вопросом, обрабатывает ли это на самом деле их в своего рода буфер.
файлы tar.gz не имеют индекса. В отличие от zip или других форматов архива это не тривиально, ни дешево получить список содержавших файлов или других метаданных. Чтобы показать Вам, какие файлы содержатся в архиве, tar действительно должен распаковать архив и извлечь файлы, хотя в случае -t
опция это делает так только в памяти.
Если общий шаблон в Вашем варианте использования должен перечислить содержавшие файлы в архиве, Вы могли бы хотеть рассмотреть использование формата архива, который может добавить индекс файла к сжатому файлу, например, zip.
Возможно, Вы также хотите смотреть на формат HDF5 для более сложных сценариев.
Я просто должен был сделать некоторые измерения для доказательства моего ответа и создал некоторые каталоги со многими файлами в них и упаковал их который оба, tar czf files#.tgz files#
и zip -r files#.zip files#
.
Для тестов я выполнил команду распаковки дважды каждый раз и взял результат второго выполнения, чтобы не измерять скорость диска.
Каталог 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
zip медленнее здесь.
Каталог files2
содержа 5 000 файлов с 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 быстрее на этот раз.
Каталог files3
содержа 5 000 файлов с 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 представляет немного служебное, который Вы заметите только со многими очень маленькими (почти пустой) файлы, тогда как для больших количеств больших файлов это выигрывает конкурс при списке файлов, содержавшихся в архиве.