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

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

答え1

また、使用することができます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:.gzファイルを解凍するために使用されるgzipを介して圧縮パッケージをフィルタリングします。
  • -t:アーカイブの内容を一覧表示します。

答え2

lotsofdata.tar.gzというtarballがあり、その中に必要なファイルがあることだけを知っていますが、名前に単語が含まれていることだけを覚えているとしましょうcontract。 2つのオプションがあります。

知っている部分に一致するファイルの完全なパスと名前を見つけるために、タールボールの内容を使用してリストし、tar(今は正確な詳細がわかったので)そのファイルを抽出するか、2つの小さな - 既知のスイッチがファイル名に対してほとんど不明な項目に一致するすべてのファイルのみを抽出します。このオプションでは、フルネームやパスの一部を知る必要はありません。詳細は次のとおりです。greptar

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

どちらがより簡単で最も便利なのかを判断するのはあなた次第です。

答え3

しばらく前に、何千ものファイルを含むタールボールから何百ものファイルを抽出しようとしました。必要なファイルは単一のワイルドカードとして参照できません。だからグーグルをしてこのページを見つけました。

しかし、上記の技術のどれも私の仕事には適していないようです。私は最終的にその男を読んでこのオプションを見つけたので、--files-from最終的な解決策は次のとおりです。

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

それは魅力のように動作します。

修正する:リストファイルは、に示されているのと同じ形式でなければなりません。tar -tvfそれ以外の場合はファイルを抽出できません。

答え4

中かっこを省略すると、あなたの例は私にとって効果的です。

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

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

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

関連情報