web-dev-qa-db-ja.com

tar.gzから特定のファイルを抽出する方法

大きな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からファイルを抽出するにはどうすればよいですか?

122
Ankit Vashistha

tar -zxvf <tar filename> <file you want to extract>も使用できます

tar ztf test.tar.gzに示されているように、ファイル名を正確に記述する必要があります。たとえば、 ./extract11、またはsome/bunch/of/dirs/extract11を指定する必要があります(ファイルはその名前で表示され、必要なディレクトリが自動的に作成されます)。

  • -x:tarにファイルを抽出するように指示します。
  • -f:ファイル名/ tarball名を指定します。
  • -v:詳細(ファイルの抽出中に進行状況を表示)。
  • -z:gzipでアーカイブをフィルタリングし、.gzファイルの解凍に使用します。
140
harish.venkat

_lotsofdata.tar.gz_というtarballがあり、そこに必要なファイルが1つあることを知っているとしましょう。ただし、その名前には、単語contractが含まれているだけです。次の2つのオプションがあります。

targrepを使用してtarballの内容をリストし、知っている部分と一致するファイルの完全パスと名前を見つけてから、tarを使用して1つのファイルを抽出し、正確な詳細を確認するか、またはは、2つのほとんど知られていないスイッチを使用して、ファイル名についてほとんどわかっていないことに一致するすべてのファイルを抽出することができます。このオプションでは、完全な名前やパスの一部を知っている必要はありません。詳細は次のとおりです。

オプション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*'
_

あなた次第で、より簡単に、または最も役立つと思います。

38
Wendy Cricks

先日、数千のファイルを含むtarballから数百のファイルを抽出しようとしていました。必要なファイルを単一のワイルドカードで参照することはできません。それで私はググってこのページを見つけました。

ただし、上記のトリックはどれも私の仕事には適していません。私は男を読んでしまい、このオプション--files-fromを見つけたので、私の最終的な解決策は

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

そしてそれは魅力のように働きます。

pdate:リストファイルはtar -tvfと同じ形式である必要があります。そうでないと、ファイルを抽出できません。

8
JJ Tang

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
3
kenorb

中括弧を省略した場合、あなたの例は私のために機能します

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

ファイルextract11がサブフォルダーにある場合は、tarball内のパスを指定する必要があります。

$ tar --extract --file=test.tar.gz subfolder/extract11
2
Bernhard