Как извлечь определенный файл (файлы) из tar.gz

Во-первых, я НЕ рекомендую продолжить использовать NTFS, поскольку ntfs implemention в Linux была бы производительность и проблема безопасности в любое время.

Существует несколько вещей, которые можно сделать:

  • используйте некоторую более новую фс такой как ext4 или btrfs
  • попытайтесь изменить свой io планировщик, например bfq
  • выключите подкачку
  • используйте некоторый автоматический предварительный загрузчик как preload
  • используйте что-то как systemd предварительно загружать при начальной загрузке
  • ... и что-то больше

Возможно, Вы хотите дать ему попытку :-)

114
13.04.2017, 15:37
6 ответов

Можно также использовать tar -zxvf <tar filename> <file you want to extract>

Необходимо записать имя файла exacty как tar ztf test.tar.gz шоу это. Если это говорит, например. ./extract11, или some/bunch/of/dirs/extract11, это - то, что необходимо дать (и файл обнаружится под точно, что имя, необходимые каталоги создаются автоматически).

  • -x: дает tar команду извлекать файлы.
  • -f: указывает имя файла / tarball имя.
  • -v: Подробный (показывают прогресс при извлечении файлов).
  • -z: пропустите архив через gzip, используйте для распаковки .gz файлов.
130
27.01.2020, 19:29
  • 1
    $ tar -zxvf test.tar.gz extract11 tar: extract11: Not found in archive tar: Error exit delayed from previous errors –  Ankit Vashistha 16.01.2013, 09:52
  • 2
    редактирования затем пробует это tar tf archive.tar.gz | grep extract11.please проверяют, является ли extract11 в архиве или не –  harish.venkat 16.01.2013, 10:06
  • 3
    Необходимо записать имя файла exacty как tar ztf test.tar.gz шоу это. Если это говорит, например. ./extract11, или some/bunch/of/dirs/extract11, это - то, что необходимо дать (и файл обнаружится под точно, что имя, необходимые каталоги создаются автоматически). –  vonbrand 21.01.2013, 22:16
  • 4
    я хотел бы добавить точку здесь, -z опция не работает в некоторых версиях Unix как HP-UX. –  Ankit Vashistha 26.08.2015, 09:54

Ваш пример работает на меня при исключении фигурных скобок

$ tar --extract --file=test.tar.gz extract11

Если Ваш файл extract11 находится в подпапке, необходимо указать путь в tarball.

$ tar --extract --file=test.tar.gz subfolder/extract11
2
27.01.2020, 19:29
  • 1
    $ tar --extract --file=test.tar.gz extract11 tar: extract11: Not found in archive tar: Error exit delayed from previous errors –  Ankit Vashistha 16.01.2013, 09:51
  • 2
    Затем obiously extract11 не находится в файле tar. Убедитесь, что необходимо обеспечить относительный путь. Посмотрите, что –  Bernhard 16.01.2013, 09:59

Предположим, что у вас есть тарбол под названием lotofdata.tar.gz, и вы просто знаете, что там есть один файл, который вам нужен, но все, что вы можете запомнить, это то, что в его названии есть слово contract. У вас есть два варианта:

Или используйте tar и grep, чтобы перечислить содержимое вашего тарбола, чтобы узнать полный путь и имя любого файла, который соответствует известной вам части, а затем используйте tar, чтобы извлечь этот один файл, теперь вы знаете его точные детали, Или вы можете использовать два малоизвестных переключателя, чтобы просто извлечь все файлы, которые соответствуют тому, что мало что вы знаете о своем имени файла - вам не нужно знать полное имя или какую-либо часть пути к нему для этой опции. Подробности:

Вариант 1

$ tar -tzf lotsofdata.tar.gz | grep contract

В нем перечислены все файлы, имена которых содержат вашу известную часть. Затем вы извлекаете то, что хотите использовать:

$ tar -xzf lotsofdata.tar.gz <full path and filename from your list above>

Вам может понадобиться ./ перед вашим путем, чтобы он заработал.

Вариант 2

$ tar -xzf lotsofdata.tar.gz --wildcards --no-anchored '*contract*'

До вас, который вам кажется более простым или наиболее полезным.

37
27.01.2020, 19:29

Ниже приведены примеры извлечения конкретных файлов из файла tar.gz.

Из локального файла:

$ tar xvf file.tgz path/README.txt 2nd_file.txt

Из удаленного URL:

$ curl -s http://example.com/file.tgz | tar xvf - path/README.txt 2nd_file.txt
2
27.01.2020, 19:29

я пытался извлечь пару сотен файлов из архива с тысячами файлов на днях. На нужные мне файлы нельзя ссылаться с помощью одного подстановочного знака. Я погуглил и нашел эту страницу.

Однако ни один из вышеперечисленных приемов не подходит для моей задачи. В конце концов, я прочитал этого человека и нашел эту опцию - files-from , так что мое окончательное решение -

gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -

, и оно работает как шарм.

Обновление: Файл списка должен иметь тот же формат, что и в tar -tvf , иначе вы не сможете извлечь какие-либо файлы.

7
27.01.2020, 19:29

Для извлечения только файлов, соответствующих определенному шаблону:

for i in $(tar ztf test.tar.gz | grep 2021-01); do tar -xzvf test.tar.gz $i; done
-1
31.01.2021, 11:40

Теги

Похожие вопросы