大きな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
:ファイル名/ tarball名を指定します。-v
:詳細(ファイルの抽出中に進行状況を表示)。-z
:gzipでアーカイブをフィルタリングし、.gzファイルの解凍に使用します。_lotsofdata.tar.gz
_というtarballがあり、そこに必要なファイルが1つあることを知っているとしましょう。ただし、その名前には、単語contract
が含まれているだけです。次の2つのオプションがあります。
tar
とgrep
を使用して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*'
_
あなた次第で、より簡単に、または最も役立つと思います。
先日、数千のファイルを含むtarballから数百のファイルを抽出しようとしていました。必要なファイルを単一のワイルドカードで参照することはできません。それで私はググってこのページを見つけました。
ただし、上記のトリックはどれも私の仕事には適していません。私は男を読んでしまい、このオプション--files-from
を見つけたので、私の最終的な解決策は
gunzip < thousands.tar.gz | tar -x -v --files-from hundreds.list -f -
そしてそれは魅力のように働きます。
pdate:リストファイルはtar -tvf
と同じ形式である必要があります。そうでないと、ファイルを抽出できません。
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
中括弧を省略した場合、あなたの例は私のために機能します
$ tar --extract --file=test.tar.gz extract11
ファイルextract11がサブフォルダーにある場合は、tarball内のパスを指定する必要があります。
$ tar --extract --file=test.tar.gz subfolder/extract11