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を実行していることにも注意してください。
単一のtar
コマンドを実行して、必要な場所にコンテンツを抽出できます。
tar -zxvf path_to_file -C output_directory
tar
manpages で説明されているように:
-Cディレクトリ、-cdディレクトリ、-directoryディレクトリ
Cおよびrモードでは、これによりディレクトリが変更されてから、次のファイルが追加されます。 xモードでは、アーカイブを開いた後、アーカイブからエントリを抽出する前にディレクトリを変更します。
Solaris を使用していると追加したので、次のことを試してみてください。
gunzip -dc path_to_file | tar xf - -C path_to_extract
これはあなたが望むことをしますか?
tar xzvf file.tar.gz -C /target/directory
ここでの他の回答はどれも、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
十分であろう。
私はついにこれを理解しました...
find
コマンドを使用すると、見つかった各ファイルに対して任意のコマンドを実行できます。
find . -name "*.tar" -execdir tar -vxf '{}' \; -delete
現在のディレクトリ(.
)内のファイル名(find
)を再帰的に照合します。名前は正規表現(-name
)で終わります。ドットtar(*.tar"
)で終わるすべてのもの(二重引用符はbashのglob展開を防ぎます) of * .tar-私の文字通りのテストでは、周囲の状況により、各引用符の前にバックスラッシュを付ける必要がありました)。次に、一致するすべてのファイルについて、見つかったファイル(-execdir tar
)のディレクトリで詳細(-v
)を使用してtar
を実行し、収集したファイル(-x
)をtarballファイル(-f
)find
('{}'
)(単一引用符はローカルファイル名のシェル解釈を防止します)によって検索されます。一致するすべてのファイル(\;
)に対してtar
に渡されるパラメーターリストの終わりを示します(バックスラッシュはシェルを防止しますセミコロンの理解)そしてfind
に、find
(-delete
)に渡されたパラメータで示されるように、一致する各ファイルを削除するように伝えます。
最新の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ページを確認してください。