web-dev-qa-db-ja.com

gunzipとtarを使用して、tar.gzファイルを必要な特定のディレクトリに抽出するにはどうすればよいですか?

gunzip -dc /path_to_tar.gz_file/Zip1.tar.gz | tar xf -ファイルがあるディレクトリでtar.gzを実行すると、正常に抽出されます。

tar.gzファイルの内容を特定のディレクトリに配置するように指示するにはどうすればよいですか?

tarエラーでこれをgunzip -dc /path_to_tar.gz_file/Zip1.tar.gz | tar xf /target_directoryしようとしました。

また、bashスクリプトでこれを実行しようとしていることと、Solaris 10を実行していることにも注意してください。

4
DemiSheep

単一のtarコマンドを実行して、必要な場所にコンテンツを抽出できます。

tar -zxvf path_to_file -C output_directory

tarmanpages で説明されているように:

-Cディレクトリ、-cdディレクトリ、-directoryディレクトリ

Cおよびrモードでは、これによりディレクトリが変更されてから、次のファイルが追加されます。 xモードでは、アーカイブを開いた後、アーカイブからエントリを抽出する前にディレクトリを変更します。


Solaris を使用していると追加したので、次のことを試してみてください。

gunzip -dc path_to_file | tar xf - -C path_to_extract
8
user44370

これはあなたが望むことをしますか?

tar xzvf file.tar.gz -C /target/directory
2
fkraiem

ここでの他の回答はどれも、Solarisのデフォルトのtar実装のすべての警告に言及していません。そのような警告の1つは、それ自体では圧縮をサポートしないことです。プレーンな抽出は、次の方法で実現できます。

gzip -dc < /path/to/the.tar.gz | tar xvf -

さらに、次のような方法でアーカイブを作成した場合

tar cvf - /path/to/directory | gzip -c > the.tar.gz

このアーカイブを抽出すると、常に元のファイルが上書きされることがわかります。これは、Solaris tarが解凍時にアーカイブエントリから先頭の/を削除せず、パスコンポーネントを削除する手段がないためです。したがって、コンテンツのsecondコピーを抽出できるようにする場合は、少し異なるコマンドでアーカイブを作成する必要があります。

tar cvf - -C /path/to/directory . | gzip -c > the.tar.gz

または

(cd /path/to/directory && tar cvf - .) | gzip -c > the.tar.gz

Solarisの実装では、-Cスイッチは抽出に適用されません。アーカイブがこれら2つの方法のいずれかまたは類似のものを使用して作成されたと仮定すると、この2番目の形式のバリアントにより、任意の場所に抽出できます。

gzip -dc < the.tar.gz | (cd /path/to/extraction/point && tar xvf -)

GNU tar/usr/sfw/bin/gtar)がインストールされている場合、パスのストリッピングだけでなく、直接の圧縮もサポートしています。この場合、通常のオプション

/usr/sfw/bin/gtar xvzf the.tar.gz

十分であろう。

1
Fox

私はついにこれを理解しました...

findコマンドを使用すると、見つかった各ファイルに対して任意のコマンドを実行できます。

find . -name "*.tar" -execdir tar -vxf '{}' \; -delete

現在のディレクトリ(.)内のファイル名(find)を再帰的に照合します。名前は正規表現(-name)で終わります。ドットtar(*.tar")で終わるすべてのもの(二重引用符はbashのglob展開を防ぎます) of * .tar-私の文字通りのテストでは、周囲の状況により、各引用符の前にバックスラッシュを付ける必要がありました)。次に、一致するすべてのファイルについて、見つかったファイル(-execdir tar)のディレクトリで詳細(-v)を使用してtarを実行し、収集したファイル(-x)をtarballファイル(-ffind'{}')(単一引用符はローカルファイル名のシェル解釈を防止します)によって検索されます。一致するすべてのファイル(\;)に対してtarに渡されるパラメーターリストの終わりを示します(バックスラッシュはシェルを防止しますセミコロンの理解)そしてfindに、find-delete)に渡されたパラメータで示されるように、一致する各ファイルを削除するように伝えます。

1
neo

最新のLinuxでは、以下を使用できます。

tar xzf /path/to/file.tar.gz -C /target/directory/

これは以下とほぼ同じです。

(cd /target/directory/; gzip -cd /path/to/file.tar.gz|tar xf - )

Linuxを使用していない場合は、ツールのサポートされているオプションについて、manページを確認してください。

1
michas