Как мы можем извлечь определенные файлы из большого файла tar.gz? В этом вопросе я обнаружил процесс извлечения файлов из tar-файла, но, попробовав там упомянутую команду, я получил ошибку:
$ tar --extract --file={test.tar.gz} {extract11}
tar: {test.tar.gz}: Cannot open: No such file or directory
tar: Error is not recoverable: exiting now
Как мне извлечь файл из tar.gz
?
Ответы:
Вы также можете использовать
tar -zxvf <tar filename> <file you want to extract>
Вы должны написать имя файла точно так, как
tar ztf test.tar.gz
это показано. Если он говорит, например./extract11
, илиsome/bunch/of/dirs/extract11
, это то, что вы должны дать (и файл будет отображаться именно под этим именем, необходимые каталоги создаются автоматически).-x
: инструктирует tar для извлечения файлов.-f
: указывает имя файла / имя тарбола.-v
: Подробный (показать прогресс при извлечении файлов).-z
: фильтровать архив через gzip, использовать для распаковки .gz файлов.источник
$ tar -zxvf test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
tar tf archive.tar.gz | grep extract11
Пожалуйста, проверьте, есть ли extract11 в архиве или нетtar ztf test.tar.gz
это показано. Если он говорит, например./extract11
, илиsome/bunch/of/dirs/extract11
, это то, что вы должны дать (и файл будет отображаться именно под этим именем, необходимые каталоги создаются автоматически).-z
опция не работает в некоторых версиях Unix, таких как HP-UX.f
не должно быть в конце. Но за ним должно следовать имя файла. Этот пример со всеми другими вариантами после имени дегтя работает отлично:tar -f mytar.tar.gz -zxv dir/somefile
. Он извлекает "dir / somefile" из "mytar.tar.gz".Предположим, у вас есть tarball,
lotsofdata.tar.gz
и вы просто знаете, что там есть один файл, который вы хотите, но все, что вы можете вспомнить, это то, что его имя содержит словоcontract
. У вас есть два варианта:Либо используйте
tar
иgrep
для отображения содержимого вашего архива, чтобы вы могли узнать полный путь и имя любых файлов, которые соответствуют части, которую вы знаете, а затем используйте,tar
чтобы извлечь этот файл, теперь вы знаете его точные детали, или вы можете использовать два малоизвестные ключи просто извлекают все файлы, которые совпадают с тем, что вы мало знаете о имени вашего файла - вам не нужно знать полное имя или какую-либо часть его пути для этой опции. Детали:Опция 1
Это будет список деталей всех файлов, имена которых содержат вашу известную часть. Затем вы извлекаете то, что вы хотите, используя:
Вам может понадобиться
./
перед вашим путем, чтобы он работал.Вариант 2
До вас, что вы находите проще или наиболее полезным.
источник
tar -xzf lotsofdata.tar.gz <full path and filename from your list above>
работал для меня без предоставления./
в начале полного пути--wildcards
опцию. Я был в состоянии все еще получить подобное поведение с-x -O *foo
.*foo
в моем случае это был глобус имени файла, так как я знал, что файл заканчивается на foo.Я пытался извлечь пару сотен файлов из tarball с тысячами файлов на днях. На нужные мне файлы нельзя ссылаться одним подстановочным знаком. Так что я погуглил и нашел эту страницу.
Тем не менее, ни один из вышеперечисленных приемов не подходит для моей задачи. Я закончил тем, что читал человека, и нашел эту опцию
--files-from
, поэтому мое окончательное решениеи это работает как шарм.
Обновление: файл списка должен иметь тот же формат, что и вы
tar -tvf
, иначе вы не сможете извлечь какие-либо файлы.источник
Ваш пример работает для меня, если вы опустите скобки
Если ваш файл extract11 находится в подпапке, вы должны указать путь в архиве.
источник
$ tar --extract --file=test.tar.gz extract11
tar: extract11: Not found in archive
tar: Error exit delayed from previous errors
Ниже приведены примеры извлечения определенных файлов из файла tar.gz.
Из локального файла:
С удаленного URL:
источник