Файли 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
Все ще не переконливо, але поштовий індекс швидше цього разу.
Тест 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?