Извлеките 1 файл из tar.gz с помощью bash

Можно ли программным образом вытащить один файл из файла с ограниченным размером .tar.gz, не извлекая весь архив на диск? По сути, мне нужно попасть в большие файлы tar.gz по сети и извлечь один маленький текстовый файл. Кажется, что несколько сверху, чтобы вытащить и извлечь tarball на диск, затем вытащить файл, а затем удалить все остальное. Кроме того, я буду делать это рекурсивно (например, зависимости пакетов, каждый текстовый файл указывает на большее количество tar.gz), поэтому чем меньше трафик сети и циклы процессора я могу избежать, тем лучше.

Ответы

Ответ 1

На странице man, чтобы извлечь blah.txt из foo.tar.gz:

tar -xzf foo.tar.gz blah.txt

(И это касается суперпользователя, конечно, но эй, быстрые ответы тоже приятные.)

Ответ 2

Я повторяю ответ Jefromi, добавив в него путь к файлу, если у вас есть каталоги в файле tar (это может показаться некоторым очевидным, но мне было непонятно, как указать структуру каталогов),

Например, если вы сделали tar в каталоге src/, а blah.txt находилось в папке release1/shared/, вы вернетесь в каталог src/(если вы хотите, чтобы он не был открыт в одном месте)

tar -xzf tar.gz release1/shared/blah.txt

Если вы не помните структуру каталогов вашего файла tar (я немного дезорганизована и иногда забываю, где я сделал tar), вы всегда можете

tar -tzf tar.gz

чтобы увидеть содержимое, отменив его (Ctrl + C), как только вы узнаете о своей структуре каталогов.