Действительно ли возможно программно вытянуть единственный файл от прилично размерного .tar.gz, не извлекая весь tarball к диску? По существу я должен проникнуть внутрь больших tar.gz файлов по сети и извлечь 1 небольшой текстовый файл. Это кажется несколько чрезмерным, чтобы вытянуть и извлечь tarball к диску, затем вытащить файл, затем удалить все остальное. Также я собираюсь быть выполнением этого рекурсивно (например, зависимости от пакета, каждый текстовый файл указывает на большее количество tar.gz's), таким образом, чем меньше сетевого трафика и циклов CPU мне может сойти с рук, тем лучше.
Для извлечения файла blah.txt из foo.tar.gz из справочной страницы:
tar -xzf foo.tar.gz blah.txt
(И это, конечно, относится к суперпользователю, но, эй, быстрые ответы тоже хороши.)
Я повторяю ответ Джефроми с добавлением указания пути к файлу, если у вас есть каталоги в tar-файле (это может показаться очевидным для некоторых, но изначально для меня это было не ясно как указать структуру каталогов).
Например, если вы сделали tar в каталоге src /, а файл blah.txt находился в каталоге release1 / shared /, вы вернетесь в каталог src / (если хотите, чтобы он был распакован в том же месте)
tar -xzf tar.gz release1/shared/blah.txt
Если вы не помните структуру каталогов вашего tar-файла (я немного дезорганизован и иногда забываю, где я сделал tar), вы всегда можете
tar -tzf tar.gz
увидеть содержимое, отменив (Ctrl + C) один раз вы получите представление о структуре ваших каталогов.