Чи розгортає файл tar -tvf або просто перераховує імена?


9

У мене tar.gzфайл 32 Гб. Я намагався витягнути з нього певні папки, тому перерахував вміст за допомогою наступної команди, щоб переглянути структуру файлів:

tar -tvf file.tar.gz > files.txt

Здається, візьмеш вічно список усіх файлів. Моє запитання: чи прапор -t також витягує файли? Я знаю, що він не витягується з диска, але кількість часу, яке потрібно, змушує мене замислитися, чи насправді вони обробляють їх у якомусь буфері.



3
@smci: Це автоматично виявлено, тому не дуже забуте.
Ри-

Відповіді:


14

Файли 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 представляє невеликі накладні витрати, які ви помітите лише з багатьма дуже маленькими (майже порожніми) файлами, тоді як для великої кількості великих файлів він виграє змагання при переліку файлів, що містяться в архіві.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.